У меня проблемы с 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 и выглядел очень грязно.
Любая полезная информация по этой проблеме будет принята с благодарностью и заранее.