がまずオフ、あなたのループでは、あなたが最初の真の価値を見つけたら、変数を休憩を離れ必要です。私はあなたのforループの条件の一つとしてboolean isFoundを提案したいと思います。それはさておき、ここで私はそれについて移動したい方法です(注:これは、あなたのループ内で右/垂直、水平の下に配置されます):この例では
//positive slope diagonal
if(((i - Math.min(i, l)) + k) < 8 && ((l - Math.min(i, l)) + k) < 8)
testArray[(i - Math.min(i, l)) + k][(l - Math.min(i, l)) + k] = true;
//negative slope diagonal
if((k) < 8 && ((l + i) - k) >= 0 && ((l + i) - k) < 8)
testArray[k][(l + i) - k] = true;
は、対角線が分割されています。最初の対角線については、その位置が配列の境界内にあることを確認します(私はビットの位置をどのようにして決定するか説明します)。次に、各対角線の開始位置のXとYの値を決定しますかっこ内の最後に、K個の単位を開始位置から対角線上のグリッドを横切るようにX方向とY方向に(段階的に)移動させて位置を見つける。反対方向を指す診断についても同じことが繰り返されますが、対角が反対方向を向いているように、X値にはKが減算され、加算されません。開始位置と移動のための正確なロジックは、位置を突き止めたり、アルゴリズムを引き出したりすることによって最もよく分かります。
例:
の配置(私は1つの真値を求めた後に停止することを確認するために変数に追加します):
boolean notFound = true;
for(int i = 0; i < 8 && notFound; i++){
for (int l = 0; l < 8 && notFound; l++){
if (testArray[i][l]){
for (int k = 0; k < 8; k++){
testArray[i][k] = true;
testArray[k][l] = true;
if(((i - Math.min(i, l)) + k) < 8 && ((l - Math.min(i, l)) + k) < 8)
testArray[(i - Math.min(i, l)) + k][(l - Math.min(i, l)) + k] = true;
if((k) < 8 && ((l + i) - k) >= 0 && ((l + i) - k) < 8)
testArray[k][(l + i) - k] = true;
}
notFound = false;
}
}
}
正確にコードが配置されます。 3番目のループの内側か、2番目のループのif文の内側にありますか?このコードは3番目のループ –
の中にあれば動作しないため、プレースメントで更新しました。 – Drone6251