2D Arrays - Ошибка с подсчетом алгоритма соседей (игра жизни Конвея) - PullRequest
1 голос
/ 13 марта 2012

У меня проблемы с Conways Game of Life, в частности, с использованием двумерного целочисленного массива для подсчета количества «соседей» истинного значения из двумерного логического массива (все массивы были уменьшены до 10x10 для простоты).

Я использую следующий алгоритм для подсчета количества соседних ячеек в двумерном логическом массиве;

public static int neighbourCount(boolean[][] inputArray, int x, int y)
{
    // X and Y co-ordinates for all spots around current point
    int[] xVals = {x - 1,   x - 1,  x - 1,  x,      x,      x + 1,  x + 1,  x + 1};
    int[] yVals = {y - 1,   y,      y + 1,  y - 1,  y + 1,  y - 1,  y,      y + 1};

    int nCount = 0;

    // Count neighbours algorithm
    for (int i = 0; i < 8; i++)
    {
        if (xVals[i] > 0 && yVals[i] > 0 && xVals[i] < 10 && yVals[i] < 10)
        {
            if (inputArray[(xVals[i])][(yVals[i])])
            {
                nCount++;
            }
        }
    }
    return nCount;
}

Я использовал этот алгоритм специально для предотвращения исключений за пределами.

Я использовал следующий алгоритм для распечатки значений;

    // Print countNeighbours Algorithm
    for (int i=0; i < 10; i++)
    {
        for (int j=0; j < 10; j++)
        {
            countNeighbours[i][j] = neighbourCount(gameBoard, i, j);
            System.out.print(" " + countNeighbours[i][j]);
        }

    System.out.println("");
    }

Я протестировал алгоритм со следующими начальными значениями (* = истинные логические значения);

. . . . * . . . . .
. . . * * * . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

Ожидаемые результаты должны были быть;

. . 1 3 3 3 1 . . .
. . 1 2 3 2 1 . . .
. . 1 2 3 2 1 . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

Результаты, которые были даны были;

. . 1 2 3 2 1 . . .
. . 1 1 2 1 1 . . .
. . 1 2 3 2 1 . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

Я рассмотрел использование альтернативного алгоритма, использующего массив несколько большего размера для предотвращения исключений за пределами границ, однако он состоял из многих операторов if и выглядел очень грязно.

Любая полезная информация по этой проблеме будет принята с благодарностью и заранее.

1 Ответ

4 голосов
/ 13 марта 2012

Предположительно, вы должны тестировать> = 0, а не> 0, когда тестируемые индексы находятся в границах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...