ゲームボードのいくつかのエントリを特定の順序で反復処理してチェックしようとしています。 私が気づいたのは、メソッドがjunitテストで呼び出されたときに、最初のforループでスタックされ、次のものと続くことなく、メソッドの最後にジャンプするfalseを返します。 最初の3つのループを必要とするテストを実行すると動作しますが、もう1つのテストでは2番目のループが必要ですが、これは実行されません。メソッドがループのために条件付きの場合
質問:他のループを最初に確認することなく、なぜ終了にジャンプしますか?
public boolean hasDiagonal(Mark m) {
for (int i = 0; i <= dimension-4; i++) {
for (int j = 0; j <= dimension-4; j++) {
for (int k = dimension-1; k == 3; k--) {
if (getField(i , j , k ) == m &&
getField(i+1, j+1, k-1) == m &&
getField(i+2, j+2, k-2) == m &&
getField(i+3, j+3, k-3) == m) {
return true;
//Stops here, if this part doesn't yield true,
//it returns false immediately
}
}
}
}
//This doesn't get checked
for (int i = dimension-1; i == 3; i--) {
for (int j = 0; j <= dimension-4; j++) {
for (int k = dimension-1; k <= 3; k--) {
if (getField(i , j , k ) == m &&
getField(i-1, j+1, k-1) == m &&
getField(i-2, j+2, k-2) == m &&
getField(i-3, j+3, k-3) == m) {
return true;
}
}
}
}
return false;
}
デバッガでコードをステップ実行しようとしましたか? –
何が起こっているのかを確認するために2つのprintステートメントを使用しましたが、2番目の部分の印刷は印刷されません。また、すべてのものをwhileループに入れます。これにより、上記のコードの最初のループ部分に固執します。 – ffritz
デバッガーを使用し、印刷ステートメントに依存しないでください。ステップフィルタを使用すると、実行のすべての行をトレースして、コードの実行方法を示すことができます。デバッガを使用すると、問題のある場所を特定できます。 IDEは通常、EclipseやIDEAなどのデバッガにバンドルされています –