Почему мой счет возвращается неверное значение?

    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). Это делает счет 1 слишком высоким. Ввести if чтобы не считать саму точку (r, c).
  2. Вы останавливаетесь слишком рано jfor цикл, прежде чем он попадет в c + 1, Это делает счет 2 слишком низким (не хватает 2 матчей). Измените условие на j<=c+1, чтобы соответствовать ifor состояние петли.

Объединенные эффекты двух ошибок (+1 и -2) объясняют, почему ваш счет низок на 1,

Другие вопросы по тегам