我正在寫Java掃雷艇克隆,我一直在計算周圍炸彈數量的部分麻煩。出於某種原因,有些細胞可以檢測到其他炸彈,或者根本沒有炸彈(甚至奇怪,有些細胞工作正常)。有人可以幫忙嗎?謝謝!掃雷周邊礦山工程的一半時間
注:key[][]
是int[][]
陣列記錄所述炸彈的位置,指定爲9.
0表示一個空的空間
int count
表示處於圍繞每個8個細胞炸彈的量細胞(這就是爲什麼我也有8 try-catch代碼迴路佔邊境細胞)
PS:抱歉壞格式
編輯:我想通在哪裏我的問題是(我打電話給我兩次)。任何關於如何讓代碼更簡單更高效的建議?
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塊。它應該以這樣的方式進行編碼,即數組索引越界不會發生,如果它仍然發生*然後*您想拋出異常,以便程序爆炸並且您知道您沒有正確寫入。 –
關於代碼片段的一個小提示:如果你不使用它,讓自己一個合適的IDE - 像IntelliJ https://www.jetbrains.com/idea/download/ - 並使用「重新格式化代碼」來帶上你的代碼在將其粘貼到論壇或StackOverflow中之前保持良好狀態。如果你的代碼更容易閱讀,人們更可能幫助你。 –
喜歡測試,看看我或一個是0先? –