2D阵列 - 计算邻居算法的错误(康威的生命游戏)

时间:2012-03-13 19:21:21

标签: java arrays exception

我遇到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语句,看起来非常混乱。

对此问题的任何有用的见解将不胜感激,并提前感谢。

1 个答案:

答案 0 :(得分:4)

大概你应该测试&gt; = 0,而不是&gt; 0,当测试索引在界限内?