生命游戏 - Out of Bounds数组索引

时间:2014-11-29 07:36:55

标签: java arrays indexoutofboundsexception

我正在为我的Java入门课程开发标准的Game Of Life计划,到目前为止,我已经能够自己完成很多这样的课程。然而,我在计算给定细胞的邻居时遇到一些困难,以确定它是否存在或死亡。

这是我的countNeighbors方法:

public static int countNeighbors(int [][] board, int A, int B) 
{
    int [][]a = board;
    int count = 0;

    if (a[A][B] == 0 || a[A][B] == 1) {
        try{
            if (a[A-1][B-1] == 1) {count++;}
            if (a[A  ][B-1] == 1) {count++;}
            if (a[A+1][B-1] == 1) {count++;}
            if (a[A-1][B  ] == 1) {count++;}
            if (a[A+1][B  ] == 1) {count++;}
            if (a[A-1][B+1] == 1) {count++;}
            if (a[A  ][B+1] == 1) {count++;}
            if (a[A+1][B+1] == 1) {count++;} 
        }

    catch (ArrayIndexOutOfBoundsException e) {}

    }
    return count;
}

当我运行我的程序时,此方法不会正确计算邻居,从而初始化不正确的新一代。如何克服数组的越界索引?

1 个答案:

答案 0 :(得分:1)

您应该检查AB是否属于board数组的范围。然后,您应该检查向AB添加或减去1是否使您保持在数组的范围内。

例如:

if (A < a.length && B < a[A].length) {
    if (a[A][B] == 0 || a[A][B] == 1) {
        if (A > 0 && B > 0)
            if (a[A-1][B-1] == 1) {count++;}
        ....
        if (A+1 < a.length && B+1 < a[A].length)
            if (a[A+1][B+1] == 1) {count++;} 
    }
}