2017-01-11 31 views
1

私は配列を埋める必要がある宿題に取り組んでおり、その中に4つの連続する数字があるかどうか、左右または斜めに配置します。私はロジックがダウンしていると思うが、私のforループは、配列を検索する代わりに最初の繰り返しで停止しています。どんな助けもありがとうございます。Java for-loopが反復処理されていない、反復処理ではなく反復処理後にメソッドを停止する

public static boolean isConsecutiveFour(int[][] values) { 
    int One = 0; 

    for (int i = 0; i < values[0].length; i++) { 
     for (int j = 0; j < values.length; j++) { 
      One = values[i][j]; 
      //System.out.println(One); 
      // up and down 
      if (values[i + 1][j] == One) { 
       if (values[i + 2][j] == One) { 
        if (values[i + 3][j] == One) { 
         return true; 
        } 
       } 
      } 
      // left to right 
      if (values[i][j + 1] == One) { 
       if (values[i][j + 2] == One) { 
        if (values[i][j + 3] == One) { 
         return true; 
        } 
       } 
      } 
      // diagonal to right 
      if (values[i + 1][j + 1] == One) { 
       if (values[i + 2][j + 2] == One) { 
        if (values[i + 3][j + 3] == One) { 
         return true; 
        } 
       } 
      } 
      // diagonal to left 
      if (i >= 3 && j >=3) { 
       if (values[i - 1][j - 1] == One) { 
        if (values[i - 2][j - 2] == One) { 
         if (values[i - 3][j - 3] == One) { 
          return true; 
         } 
        } 
       } 
      } else 
       return false; 
     } 
    } 
    return false; 

} 
+1

'values'配列を指定してください。 – nvioli

+4

'int One = 0;'whät? – luk2302

+1

ここに大量のコードを投稿しました。これを[mcve]に減らしてください。 –

答えて

5
// diagonal to left 
if (i >= 3 && j >=3) { 
    if (values[i - 1][j - 1] == One) { 
     if (values[i - 2][j - 2] == One) { 
      if (values[i - 3][j - 3] == One) { 
       return true; 
      } 
     } 
    } 
} else 
    return false; 

この最後のif文が失敗した場合、問題はelse句がトリガーとfalseを返し、です。 1つの特定の小切手が失敗したためにここに戻るのは時期尚早です。

else句を削除してください。すべてのループ反復が実行されるまでfalseを返すことは望ましくありません。関数の最後の最後のreturn falseは必要なものだけです。

2

私はコード全体をチェックしませんでしたが、条件が間違っているようです。通常、外側forループは配列の最初の次元をチェックインし、2番目の次元は内側にチェックインします。また、値[1]の長さが値[0]の長さよりも小さいので、内部ループでvalues [i] .lengthを使用する必要があります。

for (int i = 0; i < values.length; i++) { 
    for (int j = 0; j < values[i].length; j++) {