Я пишу тронный твитер на Яве, и у меня были некоторые проблемы с частью, в которой подсчитывается количество бомб. По какой-то причине, либо некоторые клетки обнаруживают дополнительные бомбы, либо вообще не имеют бомб (даже странно, некоторые клетки работают нормально). Может ли кто-нибудь помочь? Благодаря!minesweeper окружающие мины работает в половину времени
примечание: key[][]
является int[][]
массив, который записывает местоположение бомб, обозначенный как 9.
0 представляет собой пустое пространство
int count
представляет количество бомб, которые находятся в 8 клеток, окружающих каждый клетки (именно поэтому у меня есть 8 примерка задвижки петли для учета пограничных клеток)
пса: простите за плохое форматирование
EDIT: Я понял, где моя проблема была (я назвал 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. Он должен быть закодирован таким образом, что индекс массива за пределами границ не может произойти, и если он все еще произойдет *, то * вы хотите, чтобы возникло исключение, чтобы программа взрывалась, и вы знаете, что не указали ее правильно. –
небольшой отзыв о фрагментах кода: если вы не используете его уже, получите себе подходящую IDE - например IntelliJ https://www.jetbrains.com/idea/download/ - и используйте «Reformat Code», чтобы привести свой код в хорошей форме, перед тем, как вставить его в форум или в StackOverflow. Если ваш код легче читать, люди с большей вероятностью помогут вам. –
как тест, чтобы увидеть, является ли i или a 0 первым? –