0

私はプログラミングの初心者で、私は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; 
    } 
+0

あなたのロジックは奇妙に見えます。あなたのifは言っている:行のすべての要素が同じではない場合、最初の要素が空でない場合、それは無効です。 –

+0

あなたはおそらく、行の要素のすべてが同じでないか、最初の要素が空の場合はinalidです –

+0

ifは次のようになります: 'if(!field [i] [0] .equals(field [ –

答えて

0

はあなたがすべてのXまたは全て0からなる任意の水平方向の行を見つける場合はtrueを返すようにしたいと仮定すると、あなたの空のフィールドが文字列であります"[ ]"これは動作するはずです:

boolean checkHorizontal(String[][] board) { 
    final String emptyCell = "[ ]"; 

    for (int row = 0; row < board.length; row++) { 
     String firstElementInRow = board[row][0]; 
     if (firstElementInRow.equals(emptyCell)) { 
      continue; 
     } 
     int column; 
     for (column=1; column < board[row].length; column++) { 
      if (!board[row][column].equals(firstElementInRow)) { 
       break; 
      } 
     } 
     if (column==board[row].length) { 
      return true; 
     } 
    } 
    return false; 
} 
0

あなたはそれをチェックしている場合だけで、各行の最初の要素を取得し、同じ行の次の二つの要素と比較し、他のtruefalseを返さない水平理由。

public static boolean checkHorizontal(String[][] field) { 
    boolean valid = false; 
    int j = 0; 
    for (int i = 0; i < field.length; i++) { 
     String s = field[i][0]; //first element of each row 
     if (s.equals(field[i][j + 1]) && s.equals(field[i][j + 2])) 
      return true; 
    } 
    return valid; 

}