私はプログラミングの初心者で、私はTic-Tac-Toeに似た簡単なゲームを作っています。ランダムなサイズの正方形のゲームフィールド(2D配列)があります。それは次のようになります。2D配列(Java)の行の不正確な検証
boolean checkHorizontal(String[][] field) {
boolean valid = true;
for (int i = 0; i < field.length; i++) {
for (int j = 1; j < field[i].length; j++) {
if (!field[i][0].equals(field[i][j]) && !field[i][0].equals("[ ]")) {
valid = false;
}
}
}
return valid;
}
そして、問題はそれであり:ここでは
[ ] [ ] [ ]
[ ] [ ] [ ]
[ ] [ ] [ ]
行のために試合をチェックアウトする方法の一つです。この方法は次のように、例えば、通常の場合のためcorrecltyに動作します:
[ ] [ ] O
X X X
[ ] O [ ]
しかし、ゲームのフィールドが空であるかcheckHorizontal(String[][] field)
の以下、
[ ] [ ] [ ] [ ] X [ ]
[ ] [ ] [ ] [ ] X [ ]
[ ] [ ] [ ] [ ] X [ ]
結果はtrue
あるとして最初の列は、空の場合が、行に一致するものがないので、ここではfalse
にする必要があります。これを修正する方法は本当にわかりません。 @David Chowellerの答えが私を助けました。私は彼の方法を少し変更されたが、一般的に、それは同じことだ:
boolean checkHorizontal(String[][] field) {
boolean valid = false;
for (int i = 0; i < field.length; i++) {
if (field[i][0].equals("[ ]")) {
continue;
}
int j;
for (j = 1; j < field[i].length; j++) {
if (!field[i][j].equals(field[i][0])) {
break;
}
}
if (j == field[i].length) {
valid = true;
}
}
return valid;
}
あなたのロジックは奇妙に見えます。あなたのifは言っている:行のすべての要素が同じではない場合、最初の要素が空でない場合、それは無効です。 –
あなたはおそらく、行の要素のすべてが同じでないか、最初の要素が空の場合はinalidです –
ifは次のようになります: 'if(!field [i] [0] .equals(field [ –