Java: Wie kann ich die maximale und minimale Augenzahl erkennen?
Hallo,
ich soll dieses Programm programmieren:
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.
Ansatz:
int Spieler1 = util.Zufall.wuerfeln();
int Spieler2 = util.Zufall.wuerfeln();
int Punkte = 0;
while (Punkte == 5) {
}
}
Ich weiß nicht, welche Methode man braucht, um die maximale bzw. minimale Augenzahl zu erkennen.
2 Antworten
Die Zahlen die gewürfelt wurden stehen doch in Spieler1 und Spieler2.
Also sowas wie
if (Spieler1 > Spieler2) {
Spieler1_Punkte++;
} else if (Spieler2 > Spieler1) {
Spieler2_Punkte++;
}
Dein ganzer Aufbau sieht aber schon etwas komisch aus. Wenn du nur eine Variable für die Punktzahl hast, woher weißt du dann, welcher Spieler zu erst 5 Punkte hat?
Und du wirst ja auch mindestens 5 Runden spielen müssen, also wirst du auch mindestens 5 mal würfeln müssen, daher sollte doch in der Schleife gewürfelt werden, oder? Also eher Richtung:
import java.util.Random;
public class Wuerfelspiel {
public static void main(String args[]) {
Random r = new Random();
int s1_Punkte=0;
int s2_Punkte=0;
int s1;
int s2;
while (s1_Punkte<5 && s2_Punkte<5) {
s1 = r.nextInt(6)+1;
s2 = r.nextInt(6)+1;
if (s1 > s2) {
s1_Punkte++;
} else if (s2 > s1) {
s2_Punkte++;
}
}
if (s1_Punkte > s2_Punkte) {
System.out.println("Spieler 1 gewinnt mit " + s1_Punkte + ":" + s2_Punkte + " Punkten!");
} else {
System.out.println("Spieler 2 gewinnt mit " + s2_Punkte + ":" + s1_Punkte + " Punkten!");
}
}
}
und ich verstehe auch nicht warum in der while schleife ein && zu sehen ist , dann würden ja beide gewinnen, könnte man es nicht mit ein oder machen?
also so meine ich das, s1_Punkte | s2_Punkte == maxPunkte
Nein.
while (s1_Punkte<maxPunkte && s2_Punkte<maxPunkte)
bedeutet im Grunde:
Führe die Schleife erneut aus, wenn Spieler1 weniger als maxPunkte hat UND Spieler2 weniger als maxPunkte hat.
also so meine ich das, s1_Punkte | s2_Punkte == maxPunkte
Das wäre dann eher eine Abbruchbedingung. Geht natürlich auch, dann setzt du den Schleifenkopf auf true und bringst eine Abbruchbedingung in der Schleife unter. Also zum Beispiel:
while (true) {
s1 = r.nextInt(6)+1;
s2 = r.nextInt(6)+1;
if (s1 > s2) {
s1_Punkte++;
} else if (s2 > s1) {
s2_Punkte++;
}
if (s1_Punkte == maxPunkte || s2_Punkte == maxPunkte) {
break;
}
}
wie kann ich das mit der gleichen augenzahl einbringen , wenn da steht das keiner punkte bekommt wenn beider die gleiche Augenzahl haben?
Oha, man merkt, dass du wirklich gar nichts verstehst. ;-)
Das brauchst du nicht zu berücksichtigen. Du musst dem Computer nur Anweisungen geben, wenn er etwas machen soll. Etwas abzufragen, wo dann nichts geschehen soll, ist doch unnötig.
Stell dir vor, du spielst das Spiel mit deinem Kumpel. Ihr beide habt einen Würfel und du bist Schriftführer und schreibst die Punkte auf. Wenn ihr beide die gleiche Augenzahl gewürfelt habt, was schreibst du dann auf?
Na gar nichts! Genau das gleiche gilt auch für den Computer. Er gibt Spieler 1 einen Punkt, wenn seine Zahl höher war, oder Spieler 2 einen Punkt, wenn dessen Zahl höher war. Sind beide Zahlen gleich, macht er einfach gar nichts. Es bekommt also keiner einen Punkt. Das braucht man aber nicht extra berücksichtigen...
ich bin noch ein anfänger ich habe vor 3 Tagen angefangen mich damit zu beschäftigen
Das ganze machst du mit if-Verzweigungen. Zudem brauchst du für beide Spieler eine Variable für die Punkte. Bei der While-Schleife ist auch nen Fehler, du müsstest dort abfragen, ob ein Spieler den Gewünschten Punktestand erreicht hat, oder das mit einer if-Verzweigung in der While-Schleife abfragen und dann mit einem Break beenden. Kann dir leider kein Code-Beispiel senden, da ich diese Nachricht am Handy verfasse..
Wenn du ein wenig nachdenkst und dir ggf. nen Tutorial auf YouTube anschaust, klappt das schon. Such einfach mal „Java if statements“
kann ich int maxPunkte=5;
festlegen um die maximale Punktzahl zu bestimmen