Archief - [PROG][JAVA] Math.random + String Random words

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Retro.Johnson

Legacy Member
Hallo,

Ik moet voor school een "Blad Steen Schaar" spel maken, met behulp van while/for etc. Nu vroeg ik me af hoe ik dmv Math.random ( dat dan 0, 1 of 2 genereert ) een string kan printen ipv dat getal.

ik dacht aan :

int blad, steen, schaar;

double computer;

computer = (int)(Math.random() *2 + 1);

if ( computer == 0) {
}
System.out.println("De computer kiest : " + blad );
if ( computer == 1) {
}
System.out.println("De computer kiest : " + steen );
if ( computer == 2) {
System.out.println("De computer kiest : " + schaar );
}

stukje code dat ik al heb

iemand die weet hoe ik dit zou kunnen oplossen ?

killgore

Legacy Member
?

Array met waarden blad,steen,schaar.
Random nummer van 0 tot en met 2.

array[random nummer] ophalen
:p.

Retro.Johnson

Legacy Member
verdraaid, da heb ik vandaag gezien :D Tis een beetje crappy uitgelegd, ma kwist ni hoe ik het anders moest verwoorden...

Massis

Legacy Member
PHP:
int computer; //ge cast uw math.random naar een int en steekt dat in een double? nergens goed voor
String keuze;

computer = (int)(Math.random() *2 ); //genereert getal van 0 tot 2 => 3 getallen

case (computer){
case 0:
keuze = "blad"
break;
case 1:
keuze = "steen"
break;
case 2:
keuze = "schaar"
break;
}

System.out.println("de computer kiest " + keuze);

zou ook moeten werken

't feit da ge eerst 3 integer variabelen aanmaakt zijnde blad, steen,schaar en daar steeds een getal in steekt, zorgt er uiteraard voor dat hij de INHOUD van die variabelen gaat afdrukken (zijnde 0 1 of 2) en niet de naam, dus :

PHP:
double computer;

computer = (int)(Math.random() *2 + 1);

if ( computer == 0) {
System.out.println("De computer kiest : blad" );
}
if ( computer == 1) {
System.out.println("De computer kiest :steen" );
}
if ( computer == 2) {
System.out.println("De computer kiest : schaar" );
}

is mss simpeler (een { openen en dan terug sluiten met } VOOR ge uw code plaatst helpt uiteraard niet ;) )

Retro.Johnson

Legacy Member
Dit heb ik tot nu toe, paar dingen veranderd aan die case etc. Nu zou hij toch normaal " Verkeerde ingave" moeten geven wanneer ik iets anders van blad / steen of schaar zou intypen ?

te laat de for etc. gezien, maar kan van pas komen omdat ik het in een lus moet steken wnn er een verkeerde opgave gemaakt wordt, maar als ik die sop's in die code plaats slaat hij die gewoon over... daarom dak ze derbuiten gezet heb

EDIT : MOET ER NOG EEN Blad wint van steen, steen wint van schaar en schaar wint van blad INSTEKEN bedankt voor de hulp


PHP:
public class Bladsteenschaar {
	public void speel() {

		System.out.println("Maak je keuze, blad steen of schaar   :");
		String keuze = Stream.readString();
		System.out.println("Uw keuze is   :  " + keuze);

		int computer;

		computer = (int)(Math.random() *2 ); 

		switch (computer) {
			case 1:
			keuze = "blad";
				System.out.println("De computer kiest :" + computer);
			break;
			case 2:
			keuze = "steen";
				System.out.println("De computer kiest :" + computer);
			break;
			case 3:
			keuze = "schaar";
				System.out.println("De computer kiest :" + computer);
                        break;
			default:
				System.out.println("Verkeerde ingave");
			break;
		}

	}


	public static void main(String[] args) {
		Bladsteenschaar b = new Bladsteenschaar();
		b.speel();
	}
}

omaha

Legacy Member
Maak er Math.random() * 3 van, anders gaat ge nooit aan 3 waarden geraken. Ook moet uwe switch bij 0 beginnen en niet bij 1. En er moet achter uwe System.out.println() + keuze komen ipv + computer.

Zo dus :


PHP:
public class Bladsteenschaar {
	public void speel() {

		System.out.println("Maak je keuze, blad steen of schaar   :");
		String keuze = Stream.readString();
		System.out.println("Uw keuze is   :  " + keuze);

		int computer;

		computer = (int)(Math.random() * 3); 

		switch (computer) {
			case 0:
			keuze = "blad";
				System.out.println("De computer kiest :" + keuze);
			break;
			case 1:
			keuze = "steen";
				System.out.println("De computer kiest :" + keuze);
			break;
			case 2:
			keuze = "schaar";
				System.out.println("De computer kiest :" + keuze);
                        break;
			default:
				System.out.println("Verkeerde ingave");
			break;
		}

	}


	public static void main(String[] args) {
		Bladsteenschaar b = new Bladsteenschaar();
		b.speel();
	}
}

Een verkeerde ingave gaat ge ook ni krijgen ze.

crazyheinz

Legacy Member
Hehe daar zaten wel een paar foutjes in :)
Ik ben ook wel in dit spelletje geïnteresseerd.
Hoe maak je nu dat blad wint van steen, steen wint van schaar en schaar wint van blad?

Retro.Johnson

Legacy Member
had nog niet alles aangepast in die geposte code omaha, was al verbeterd, maar heb die switch beginnend op 1 gezet omdat hij anders geen andere waarden wou aannemen van blad steen of schaar...

Met verkeerde ingave wil ik zeggen dat wnn er bijvoorbeeld iemand aap invoert, hij gewoon zijn vraag opnieuw stelt, want nu geeft hij ook blad / steen / schaar als je een willekeurig woord invoert

omaha

Legacy Member
Uwe switch checked ni op de invoer die gij geeft maar op de variabele die gegenereerd wordt door de Math.random() (computer dus). Als ge wilt checken op een foute ingave doet ge da best vlak na uw toekenning aan "keuze" int begin.

En hoezo, geen waarde aannemen van blad, steen of schaar ?

Retro.Johnson

Legacy Member
is mss toeval maar hij beperkt zich maar tot hetzelfde en 1 ander. Wnn ik bv dag ingeef, genereert hij alleen dag / steen, nooit schaar. Kheb het nu al een 30 tal keer gerund, met dezelfde ingave, en nog geen een keer schaar tegen gekomen. Zelfde met schaar en steen.

edit: door casenummers te veranderen kan ik nu geen zelfde dag / dag tegenkomen. ( wat ik wel moet kunnen )

en default dient toch voor niet toegekende waarden, dan kan ik die toch ni naar boven verplaatsen ?

omaha

Legacy Member
Ow ja, my bad. Het moet Math.random() * 3 zijn natuurlijk..

Over die "niet toegekende waarden" -> Uwe computer variabele gaat enkel de waarden 0, 1 & 2 genereren. Als ge verkeerde ingave wilt vermijden (dus dat de gebruiker enkel blad/steen/schaar kan ingeven), moet ge da na uw eerste initialisatie van 'keuze' doen.

killgore

Legacy Member
PHP:
import java.io.*;

class Bladsteenschaar
{

	public static boolean inArray(String needle, String[] haystack)
	{
		for (int i = 0; i < haystack.length; i++)
		{
			if (haystack[i].equals(needle)) { return true; }
		}
		return false;
	}

	public void speel() throws IOException
	{
		String[] mogelijkheden = { "blad", "steen", "schaar" };
		String keuze = null;
		int aiKeuze;
		BufferedReader inStream = new BufferedReader(
				new InputStreamReader(System.in));
		do
		{
			System.out.println("Maak je keuze (blad, steen of schaar) :");
			keuze = inStream.readLine();
		} while (!inArray(keuze, mogelijkheden));
		System.out.println("Uw keuze is   :  " + keuze);

		aiKeuze = (int) Math.floor(Math.random() * 3);
		System.out.println("De computer kiest : " + mogelijkheden[aiKeuze]);
	}

	public static void main(String[] args) throws IOException
	{
		Bladsteenschaar b = new Bladsteenschaar();
		b.speel();
	}
}
werkt perfect.

Retro.Johnson

Legacy Member
maar jammergenoeg met dingen die we nog niet of gedeeltelijk gezien hebben in de les...

maar ik bekijk het alvast :) bedankt

killgore

Legacy Member
ge kent geen arrays of zo :p?

Want dat is, naast die inputstream (omdat ik niet weet wat jij juist deed :/) zowat het enige nieuwe concept dat ik ingevoegd heb ze :p.

Retro.Johnson

Legacy Member
we zijn juist begonnen met het hoofdstuk arrays, dus veel ken ik er nog niet van, anyways, de gehele opdracht luidt eigenlijk ( output etc heb ik wat anders gedaan maar dat geeft niks, tmoet in grote lijnen erop trekken ) :

Implementeer het spelletje blad-steen-schaar. Twee spelers kiezen tesamen
voor blad, steen of schaar. Blad wint van steen, steen wint van schaar
en schaar wint van blad. Als beide spelers hetzelfde kiezen is het gelijkspel.
Schrijf een programma waarbij je dit spel tegen de computer
kunt spelen. Zorg ervoor dat je programma blijft vragen naar jouw
keuze tot je een geldige ingave doet: nl. blad, steen of schaar.
Maak je keuze: Blad, Steen of Schaar
test
Maak je keuze: Blad, Steen of Schaar
Blad
Speler koos BLAD - Computer koos STEEN => Jij hebt gewonnen!
Druk op een toets om door te gaan. . .
Noot: Het is zinvol constanten te defini¨eren voor de 3 mogelijke keuzes:
final int BLAD = 0;
final int STEEN = 1;
final int SCHAAR = 2;

MilM

Legacy Member
String[] keuzes = {"STEEN","BLAD","SCHAAR"};

Random random = new Random();
System.out.println("Computer koos: " + keuzes[random.nextInt(3)]);


Ik zou de klasse Random gebruiken in de plaats.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan