Tic Tac Toe Programm Unentschieden auswerten wird falsch gemacht?

2 Antworten

Ohne die andere if Anweisungen kann man das schwer beantworten. Deine else if Anweisung wird allerdings nur ausgeführt wenn die vorherige if Anweisung false ergeben hat. Wenn vorher in einem if irgendetwas geprüft wird und das Ergebnis true ist, dann wird die nachfolgende else if Anweisung gar nicht mehr geprüft.


joni7812 
Fragesteller
 05.01.2017, 11:46

Hier ist die ganze Methode, ich hoffe du kannst mir helfen

private void werHatGewonnen(String p) {

if (p.equals ("x") || p.equals ("o")) {
if (Feld[1].equals(p) && Feld[2].equals(p) && Feld[3].equals(p) ||
Feld[4].equals(p) && Feld[5].equals(p) && Feld[6].equals(p) ||
Feld[7].equals(p) && Feld[8].equals(p) && Feld[9].equals(p) ||
Feld[1].equals(p) && Feld[4].equals(p) && Feld[7].equals(p) ||
Feld[2].equals(p) && Feld[5].equals(p) && Feld[8].equals(p) ||
Feld[3].equals(p) && Feld[6].equals(p) && Feld[9].equals(p) ||
Feld[1].equals(p) && Feld[5].equals(p) && Feld[9].equals(p) ||
Feld[7].equals(p) && Feld[5].equals(p) && Feld[3].equals(p)) {

System.out.println(p + " hat gewonnen");

}else if(Feld[1].equals ("x") || Feld[1].equals ("o") &&
Feld[2].equals ("x") || Feld[2].equals ("o") &&
Feld[3].equals ("x") || Feld[3].equals ("o") &&
Feld[4].equals ("x") || Feld[4].equals ("o") &&
Feld[5].equals ("x") || Feld[5].equals ("o") &&
Feld[6].equals ("x") || Feld[6].equals ("o") &&
Feld[7].equals ("x") || Feld[7].equals ("o") &&
Feld[8].equals ("x") || Feld[8].equals ("o") &&
Feld[9].equals ("x") || Feld[9].equals ("o")) {

System.out.println("1,2,3 ist belegt");
}

}else {
System.out.println ("Bitte zwischen x oder o entscheiden");
}
}
0
Yuncil  05.01.2017, 11:57
@joni7812

Startest du das Programm dann immer neu? Oder hast du eine reset Methode?

0

&& bindet stärker als ||. Du musst also Klammern setzen.

Übrigens gibt es wohl hundert Möglichkeiten, diese Bedingung einfacher zu schreiben.


joni7812 
Fragesteller
 05.01.2017, 12:22

Ja das kann sehr gut sein, aber ich bin noch neu in Java.

Könntest du mir ein Beispiel geben mit den Klammern?

0
ralphdieter  05.01.2017, 12:32
@joni7812

Die Oder-Teile müssen in Klammern stehen:

if ( (Feld[1].equals("x") || Feld[1].equals("o"))
 && (Feld[2].equals("x") || Feld[2].equals("o"))
 && ( ...

Ich würde es aber so schreiben:

if ( !Feld.contains(" ") ) { ... }

Dabei nehme ich an, dass Feld genau 9 Zeichen enthält und leere Felder ein Leerzeichen enthalten.

0
Eismensch  05.01.2017, 13:13
@joni7812

Vergiss auch nicht, dass Arrays in Java bei 0 und nicht bei 1 beginnen ;)

1
ralphdieter  05.01.2017, 13:54
@Eismensch

Ups, gut beobachtet! Falls die Indizes 1-9 keine Programmierfehler sind, darf bei meiner Variante kein Space in Feld[0] stehen.

Sonst prüft man besser mit

if ( Feld.indexOf(" ", 1)==-1 ) { ... }
0