私はJavaで掃海艇クローンを書いています。周囲の爆弾数が計算される部分に問題がありました。何らかの理由で、一部の細胞が追加の爆弾を検出するか、爆弾が全く検出されません(奇妙なことに、一部の細胞は正常に機能します)。助けてもらえますか?ありがとう!鉱山周りの鉱山は半分の時間で動作します
注:key[][]
9.
0として指定された爆弾の位置を記録int[][]
アレイは、それぞれを取り囲む8個の細胞である爆弾の量を表す
int count
空きスペースを表しますセル(私も8のtry-catchが境界セルを考慮するために、ループを持っている理由です)
PS:悪いフォーマット
EDITのため申し訳ありません:私は考え出し私の問題がどこにあったか(私は私に二度電話した)。どのように私はこのコードをより簡単で効率的にすることができるかについての提案はありますか?
private void numberSet() {
int count = 0;
for (int i = 0; i < key.length; i++) {
for (int a = 0; a < key[0].length; a++) {
if (key[i][a] == 0) {
try {
if (key[i + 1][a] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i - 1][a] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i][a + 1] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i][a - 1] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i + 1][a + 1] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i - 1][a + 1] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i + 1][a - 1] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
try {
if (key[i - 1][i - 1] == 9) {
count++;
}
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
continue;
}
key[i][a] = count;
}
count = 0;
}
}
}
すべてのtry/catchブロックを削除する必要があります。それは境界外の配列インデックスが起こり得ないようにコード化されなければならず、もしそれでも* * *例外がスローされてプログラムが爆発し、正しく書かれていないことがわかったら、 –
コードスニペットに関する小さなヒント:既に使用していない場合は、IntelliJ https://www.jetbrains.com/idea/download/のような適切なIDEを取得し、コードを使用するために「再フォーマットコード」を使用してください良い形でそれをフォーラムやStackOverflowに貼り付ける前に。コードを読みやすくすると、人々があなたを助けてくれる可能性が高くなります。 –
iかaが最初に0かどうかを調べるテストが好きですか? –