我遇到Conways Game of Life的问题,特别是使用2D整数数组来计算2D布尔数组中真值“邻居”的数量(为简单起见,所有数组都缩小到10x10)。
我正在使用以下算法来计算2D布尔数组中相邻单元的数量;
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("");
}
我使用以下初始值(* = true布尔值)测试算法;
. . . . * . . . . .
. . . * * * . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
预期结果应该是;
. . 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语句,看起来非常混乱。
对此问题的任何有用的见解将不胜感激,并提前感谢。
答案 0 :(得分:4)
大概你应该测试&gt; = 0,而不是&gt; 0,当测试索引在界限内?