Почему мой счет возвращается неверное значение?
public static int countNeighbors(boolean[][] BB, int r, int c) {
int countalive = 0;
for (int i = r -1;i<=r+1; i++) {
for (int j = c -1; j<c+1;j++) {
if (BB[i][j]) {
countalive++;
}
}
}
return countalive;
}
Матрица читается.
oooooooo
o###oooo
o####o#o
ooo##o#o
o#o#o##o
oooooooo
Я заметил что-то не так, поэтому я распечатал эту часть кода. Когда побежал со спецификациями
countNeighbors(myNewMatrix,1,1)
Я получаю возвращенное значение 2, когда оно должно быть в лице 3.
Он подсчитывает количество плиток, которые истинны (#) вокруг него.
Это для задания "игра в жизнь".
1 ответ
Есть 3 соседа (1,1) в (1,2), (2,1) и (2,2). Ваш код неверен на 2 учетных записях:
- Вы подсчитываете саму клетку (1,1). Это делает счет 1 слишком высоким. Ввести
if
чтобы не считать саму точку (r, c). - Вы останавливаетесь слишком рано
j
for
цикл, прежде чем он попадет вc + 1
, Это делает счет 2 слишком низким (не хватает 2 матчей). Измените условие наj<=c+1
, чтобы соответствоватьi
for
состояние петли.
Объединенные эффекты двух ошибок (+1 и -2) объясняют, почему ваш счет низок на 1
,