【发布时间】:2017-01-01 21:01:38
【问题描述】:
我正在用 Java 编写扫雷克隆,我在计算周围炸弹数量的部分遇到了一些麻烦。出于某种原因,有些单元格检测到额外的炸弹,或者根本没有炸弹(奇怪的是,有些单元格工作正常)。有人可以帮忙吗?谢谢!
注意:key[][] 是一个 int[][] 数组,用于记录炸弹的位置,指定为 9。
0 代表一个空格
int count 表示每个单元格周围的 8 个单元格中的炸弹数量(这就是为什么我也有 8 个 try-catch 循环来解释边界单元格)
ps:很抱歉格式错误
编辑:我知道我的问题出在哪里(我给 i 打了两次电话)。关于如何使这段代码更简单、更高效的任何建议?
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 块。它应该以这样的方式编码,即数组索引越界不会发生,如果它仍然发生 然后 你希望抛出一个异常,以便程序爆炸并且你知道你没有编写它正确。
-
关于代码 sn-ps 的一个小提示:如果您还没有使用它,请给自己找一个合适的 IDE - 比如 IntelliJ jetbrains.com/idea/download - 并使用“重新格式化代码”将您的代码放入一个在将其粘贴到论坛或 StackOverflow 上之前保持良好状态。如果您的代码更易于阅读,人们就更有可能帮助您。
-
喜欢先测试一下i或a是否为0?
-
这是一半。您还需要确保它不会越过数组。就像网格边缘的单元格一样。如果您查看下面的代码,您会看到我是如何测试边缘的。
标签: java minesweeper