Was habe ich beim Würfel falsch gemacht?
Ich muss für die Schule einen Würfel machen und er soll die Zahlen die ganze Zeit ausgeben bis eine 6 auftaucht.
public void wuerfelnBis6(){
while ( zufallszahl==6){
int zufallszahl=(int) ((Math.random()*6)+1);
System.out.println(zufallszahl);}
Wo ist der Fehler?
5 Antworten
Woran macht es sich bemerkbar, dass da ein Fehler auftritt?
zufallszahl ist bei Schleifeneintritt (Prüfen der Bedingung) noch nicht definiert, ja nicht einmal deklariert. Entweder außerhalb der Schleife deklarieren und definieren (empfohlen), oder irgendwie innerhalb (da wüsste ich jetzt nicht wie)
Schau dir auch die Abbruchbedingung noch einmal genau an: ist die so richtig?
Wäre ggf. eine do ... while - Schleife angemessener? (Wieder mit der Frage nach der richtigen Abbruchbedingung)
Dann: Typecast zu int rundet. Gesucht ist aber die nächstniedrigere ganze Zahl. Also entweder noch ein Math.floor einbauen oder das "+ 1" durch "+ 0.5" ersetzen.
Die Schleife läuft nur falls die Zufallszahl 6 ist. Du möchtest aber das die Schleife läuft bis die Zufallszahl 6 ist, also while(Zufallszahl != 6)
!= Ist der Operator für ungleich.
ach und die Zufallszahl muss vor der ersten Verwendung definiert werden.
ich hab dir eine saubere, kurze Lösung erstellt
int r; do{ r = new Random().nextInt(6)+1; System.out.println("Du hast eine "+r+" gewürfelt."); }while(r!=6);
Hier wird in jedem Schleifendurchlauf ein neues Random-Objekt erzeugt und initialisiert. So ist das eigentlich nicht gedacht.
int r;
Random Rn = new Random();
do {
r = Rn.nextInt(6)+1;
System.out.println("Du hast eine "+r+" gewürfelt.");
} while (r != 6);
Mach aus dem == mal ein !=, denn sonst gibst du die Zahl nur aus, wenn sie 6 ist.
Und wenn ich mich nicht täucshe, wirst du auch mit deinem Math.random keine Zufallszahl zwischen 1 und 6 bekommen.
Aber funktioniert es auch so, wie es soll? Ich meine jetzt nicht random an sich, sondern das Zeug drumherum, dass eine ganze Zahl draus macht. Ich bin ziemlich sicher, dass da Zahlen zwischen 1 und 7 (einschließlich!) herauskommen können.
An sich funktioniert das, allerdings kam bei mir eben, als ichs getestet hab, so oft 0 oder 1 raus, dass das nicht mehr nach Zufall aussah... :D
Du musst die Variable vor der Schleife erstellen.
int zufallszahl=(int) ((Math.random()*6)+1);
while (true){
if(zufallszahl==6){
System.out.println(zufallszahl);
}
}
Das sollte funktionieren.
Wenn du möchtest, dass die Schleife zuende ist, wenn die 6 gewürfelt wurde, dann könntest du einen Boolean erstellen und diesen auf false setzten, wenn 6 gewürfelt wurde:
int zufallszahl=(int) ((Math.random()*6)+1);
boolean laufen = true;
while (laufen){
if(zufallszahl==6){
System.out.println(zufallszahl);
laufen = false;
}
}
Jap. Hast bei mir im Kopf grad nen Schalter umgelegt. Danke :D
Potentielle Endlosschleife - zufallszahl wird in der Schleife nicht geändert
du musst die zufallszahl in der letzten zeile der schleife ändern
Math.random funktioniert. Habe es schon mit einer anderen Methode gemacht wo ich nur einmal würfel.