我正在为我的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;
}
当我运行我的程序时,此方法不会正确计算邻居,从而初始化不正确的新一代。如何克服数组的越界索引?
答案 0 :(得分:1)
您应该检查A
和B
是否属于board
数组的范围。然后,您应该检查向A
或B
添加或减去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++;}
}
}