Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo!
Ich möchte ein kleines TicTacToe programieren. Dazu habe ich ein Array (field[][]) angelegt, das aus 3 mal 3 „field“ besteht. field ist vom Typ JButton. Wenn auf ein field geklickt wird, wird abwechselnd ein X bzw ein O auf den JButton geschrieben (setText()). Soweit klappt auch alles, Mein Problem liegt bei der Prüfung, ob ein Spieler gewonnen hat.
Meine Idee ist den Text aus den jeweiligen Spalten und Reihen auszulesen, die Wörter in eine ArrayList zu schrieben und dann zu schauen, ob in der Liste „XXX“ oder „OOO“ vorkommt. Leider bekomme ich immer nur false angezeigt, obwohl die Liste korrekt angelegt wird. Hat jemand eine Idee, wo mein Denkfehler liegt? Und natürlich auch gerne Tipps, wenn man das Problem eleganter lösen kann….
Hier die Methode:
Java:
boolean checkWin() {
ArrayList<String> wordList = new ArrayList<String>();
String word = "";
boolean help = false;
// Zeilenprüfung
for (int i = 0; i < 3; i++) {
word = "";
for (int j = 0; j < 3; j++) {
word = word + field[i][j].getText();
}
wordList.add(word);
}
// Spaltenprüfung
for (int i = 0; i < 3; i++) {
word = "";
for (int j = 0; j < 3; j++) {
word = word + field[j][i].getText();
}
wordList.add(word);
}
// Dieser Absatz funktioniert nicht!!!
for (String s : wordList) {
if (s.equals("XXX") || s.equals("OOO")) {
help = true;
} else {
help = false;
}
}
// Hilfsausgabe: Die Worte werden richtig angelegt und ausgegeben
for (String s : wordList) {
System.out.println(s);
System.out.println(help);
}
return help;
}
@thet1983: Ich bekomme immer false, auch wenn XXX oder OOO in einer Reihe bzw Zeile stehen!
@VfL_Freak: Wenn ich einen String-Vergleich mit .equals() mache, muss ich doch den zu vergleichenden String in Anführungszeichen setzen, oder nicht. Wenn ich es nciht mache, bekomme ich einen Compilerfehler
@truesoul: Die Strings werden korrekt erzeugt und auch korrekt in die Liste geschrieben.... Der Vergleich führt nur immer, also auch bei XXX oder OOO zu false....
boolean checkWin() {
ArrayList<String> wordList = new ArrayList<String>();
String word = "";
boolean help = false;
// Zeilenprüfung
for (int i = 0; i < 3; i++) {
word = "";
for (int j = 0; j < 3; j++) {
word = word + field[i][j].getText();
}
wordList.add(word);
}
// Spaltenprüfung
for (int i = 0; i < 3; i++) {
word = "";
for (int j = 0; j < 3; j++) {
word = word + field[j][i].getText();
}
wordList.add(word);
}
// Dieser Absatz funktioniert nicht!!!
for (String s : wordList) {
if (s.equals("XXX") || s.equals("OOO")) {
help = true;
} else {
help = false;
}
}
// Hilfsausgabe: Die Worte werden richtig angelegt und ausgegeben
for (String s : wordList) {
System.out.println(s);
System.out.println(help);
}
return help;
}
Du gibst help zurück. Was ist denn, wenn das letzte Wort False war?
Wann soll Help denn zurück gegeben werden? Wenn alle True sind?
Wenn beim ersten Treffer True zurück gegeben werden soll dann bau in der Schleife z. B ein return true ein. Und als Standard return gibst du False unten in der Methode zurück.
Eine andere Variante ist, sobald True ist machst du help = true und entfernst help = false.