我目前正在编写Java类编程,我遇到了一两个问题。
首先关闭我目前的节目是“康威的生命游戏”我已经完成了所有工作,除了算法检查相邻的细胞。
我已经在Stackoverflow上查看了大约7或8个不同的帖子以及其他网站上的一对帖子,到目前为止我找不到任何采用我所采用方法的人。
现在我需要的是有人查看我的代码并查看它是否应该工作,如果不是,为什么不呢?目前我收到一个运行时错误,上面写着:
在Life.checkold上的ArrayIndexOutOfBoundsException:5(Life.java:151)“。
我已尽力在代码中标记这个地方。
我对这些方法的输入是一个大小为5乘5的数组
首先,谢谢你至少阅读本文。其次,如果我需要包含其他任何内容,请发表评论或回复(新的抱歉)
构建NextGen:
public static boolean[][] buildnext(boolean[][] lastgen)
{
boolean[][] nextgen = new boolean[lastgen.length][lastgen[0].length];
for(int r = 0; r < lastgen[0].length; r++)
{
for(int c = 0; c < lastgen.length; c++)
{
nextgen[c][r] = checkold(lastgen, c, r);
}
}
return nextgen;
}
我的检查方法:
public static boolean checkold(boolean[][] lastgen, int col, int row)
{
int acount = 0;
boolean alive = lastgen[col][row];
if(col == 0 && row == 0) //Top Left Corner
{
if(lastgen[col][row + 1] == true) acount++; //Below
if(lastgen[col + 1][row] == true) acount++; //Right
if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
}
else if(col == lastgen.length && row == 0)//Top Right Corner
{
if(lastgen[col][row + 1] == true) acount++; //Below
if(lastgen[col - 1][row] == true) acount++; //Left
if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
}
else if(col == 0 && row == lastgen[0].length)//Bottom Left Corner
{
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col + 1][row] == true) acount++; //Right
if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
}
else if(col == lastgen.length && row == lastgen[0].length) //Bottom Right Corner
{
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col - 1][row] == true) acount++; //Left
if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
}
else if(col == 0 && row > 0 && row < lastgen[0].length) //Left Col
{
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col][row + 1] == true) acount++; //Below (This is the code that the runtime error is about)
if(lastgen[col + 1][row] == true) acount++; //Right
if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
}
else if(col == lastgen.length && row > 0 && row < lastgen[0].length) //Right Col
{
if(lastgen[col - 1][row] == true) acount++; //Left
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col][row + 1] == true) acount++; //Below
if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
}
else if(col < 0 && row == 0) //Top Row
{
if(lastgen[col][row + 1] == true) acount++; //Below
if(lastgen[col - 1][row] == true) acount++; //Left
if(lastgen[col + 1][row] == true) acount++; //Right
if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
}
else if(col < 0 && row == lastgen[0].length) //Bottom Row
{
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col - 1][row] == true) acount++; //Left
if(lastgen[col + 1][row] == true) acount++; //Right
if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
}
else if(col < 0 && row < 0) //Middle Cells
{
if(lastgen[col][row + 1] == true) acount++; //Below
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col - 1][row] == true) acount++; //Left
if(lastgen[col + 1][row] == true) acount++; //Right
if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
}
if(acount == 3 && alive == false) alive = true;
if(acount == 1) alive = false;
if(acount == 3 && alive == true) alive = false;
return alive;
}
答案 0 :(得分:1)
您的异常非常明显,您正在尝试访问超出范围的数组索引。
else if(col == 0 && row > 0 && row < lastgen[0].length) //Left Col
{
if(lastgen[col][row - 1] == true) acount++; //Above
if(lastgen[col][row + 1] == true) acount++; //Below (This is the code that the runtime error is about)
你的代码在这一行失败了:
if(lastgen[col][row + 1] == true)
说lastgen数组是2X3数组而行= 2,否则如果part为true,并考虑是否也为true,现在在这里
if(lastgen[col][row + 1] == true)
您正在尝试访问3
索引,
记住:数组索引从零开始。如果数组长度为3,则数组索引将为0,1,2。 2
将是最后一个索引。
答案 1 :(得分:1)
这些条件是否正确?
col < 0
在我看来,你应该评估“col&gt; 0”
答案 2 :(得分:0)
由于同一块中的两行
而出错 1. if(lastgen[col][row + 1] == true) acount++;
2. if(lastgen[col + 1][row + 1] == true) acount++;
假设您的lastgen元素大小为4,并且您尝试使用[row+1]
进行访问,这显然是5
修改
放else if(col == 0 && row > 0 && row < lastgen[0].length-1)
而不是else if(col == 0 && row > 0 && row < lastgen[0].length)
<强> array.length-1 强>