Java Programmierung: Wieso wird in der Konsole nichts ausgeführt?
Hallo,
ich habe bei dieser Aufgabe:
Zwei Spieler würfeln. Der Spieler mit der höchsten Augenzahl bekommt einen Punkt. Bei gleicher Augenzahl bekommt niemand einen Punkt. Das Spiel wird so lange wiederholt, bis ein Spieler 5 Punkte hat. Ausgegeben wird die Anzahl der Punkte für jeden Spieler.
ein Problem.
Und zwar wird mir in der Konsole nichts ausgeführt, obwohl kein Fehler im Code ist. Habe ich etwa einen Logikfehler drin?
Es wäre nett, wenn jemand kurz schauen könnte. Danke.
int maxPunkte = 5;
int Punkte1 = 0;
int Punkte2 = 0;
int Spieler1 = util.Zufall.wuerfeln();
int Spieler2 = util.Zufall.wuerfeln();
while (Punkte1 == maxPunkte || Punkte2 == maxPunkte) {
Spieler1 = util.Zufall.wuerfeln();
Spieler2 = util.Zufall.wuerfeln();
if (Spieler1 > Spieler2) {
Punkte1++;
}
else if (Spieler2 > Spieler1) {
Punkte2++;
}
else if (Spieler2 == Spieler1) {
Punkte1 = 0;
Punkte2 = 0;
}
System.out.println("Spieler 1 hat=" + Punkte1 + "Spieler 2 hat=" + Punkte2);
}
}
}
1 Antwort
Die Schleife wird erst betreten, wenn die Bedingung im Kopf stimmt. Bei dir kann das nicht zutreffen, da die Spieler anfangs noch keine Punkte haben.
Deine Schleife muss stattdessen so lange laufen, bis einer von beiden Spielern die fünf Punkte erhalten hat.
do {
/* ... */
}
while (punkte1 < maxPunkte && punkte2 < maxPunkte);
PS.: Bleib bei deinen Namen konsistent. Variablen sollten mit einem Kleinbuchstaben beginnen.
Spieler 1 hat=3Spieler 2 hat=2
Spieler 1 hat=3Spieler 2 hat=3
Spieler 1 hat=4Spieler 2 hat=3
Spieler 1 hat=0Spieler 2 hat=0
Spieler 1 hat=1Spieler 2 hat=0
Spieler 1 hat=2Spieler 2 hat=0
Spieler 1 hat=3Spieler 2 hat=0
Spieler 1 hat=3Spieler 2 hat=1
Spieler 1 hat=3Spieler 2 hat=2
Spieler 1 hat=3Spieler 2 hat=3
Spieler 1 hat=3Spieler 2 hat=4
Spieler 1 hat=4Spieler 2 hat=4
Spieler 1 hat=4Spieler 2 hat=5
Spieler 1 hat=4Spieler 2 hat=6
Spieler 1 hat=4Spieler 2 hat=7
Spieler 1 hat=4Spieler 2 hat=8
Spieler 1 hat=5Spieler 2 hat=8
Es sieht so aus
Die println Anweisung steht auch im Schleifenkörper, d.h. jeder Durchlauf den die Schleife macht wird auch ausgegeben.
Wenn du nur das Endergebnis ausgegeben haben möchtest, dann musst du die Anweisung nach die Schleife packen (also nach dem schließenden } der Schleife.
Außerdem möchte ich dich noch darauf hinweisen, dass wenn beide das gleiche gewürfelt haben, ihr Punktestand jeweils auf 0 zurückgesetzt wird. Wenn du sagst, es soll dann einfach keine Punkte hinzukommen, dann kannst du den Teil ersatzlos streichen. Wenn das so beabsichtigt ist, dann jut
Die Ausgaben passen nicht mit der Bedingung überein.
Alles was in deinem Schleifenkörper steht, müsste in meinem Snippet in den do-Block hinein (oder du wechselst bei dir nur den kompletten Ausdruck im Schleifenkopf aus). Die Variablen Spieler1 und Spieler2 brauchen vor der Schleife nur deklariert werden. Eine Definition erfolgt ja im Schleifenblock. Übrig bleibt danach nur noch die Anpassung der Variablennamen.
Das kann wie gesagt nicht mit der Bedingung übereinstimmen. Also ja, du machst wohl etwas falsch.
Achso ok, ich habe es jetzt geändert, aber bei mir erscheint der Print befehl mehrmals auf den Bildschirm