gpt4 book ai didi

java - 奇怪的 IndexOutOfBound 错误

转载 作者:行者123 更新时间:2023-12-01 06:35:47 25 4
gpt4 key购买 nike

您好,我正在为编程类(class)编写一个程序,我得到:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 18
at Life.countNeighbors(Life.java:200)
at Life.genNextGrid(Life.java:160)

我之前遇到过 ArrayIndexOutOfBoundsException 错误,通常是在我尝试添加或减去数组的索引时引起的。然而这次情况完全不同,我希望这里有人能指出为什么会发生错误。

关于我的程序的信息:该程序就像约翰·康威的生命游戏。使用二维数组,然后将某些元素设置为(true = 活着)或(false = 死亡),程序然后根据其邻居的数量确定细胞在下一代中是否存活或死亡。 (3个邻居=新细胞的诞生)(2,3个邻居=他们保持活力)他们在下一代中死亡的任何其他东西。

根据我的编辑,IndexOutOfBound 错误是由这一行引起的:

if(!(grid[1][1]) && !(grid[1][18]) && !(grid[18][1]) && !(grid[18][18]))

我创建了上面的行作为约束,它不应该告诉java搜索超出原始数组范围的索引,因为它们最终只是 boolean (true/false)语句。如果有人可以帮助我调试这个错误,那就太好了。

这是我的代码:(不包括主要方法)

 public static void clearGrid ( boolean[][] grid )
{
int col;
int row = 1;

while(row < 18){
for(col = 1; col < 18; col++){
grid[row][col]= false;//set each row to false
}
row++;
}//set all elements in array to false
}

public static void genNextGrid ( boolean[][] grid )
{
//new tempprary grid
boolean[][] TempGrid = new boolean[GRIDSIZE][GRIDSIZE];

TempGrid= grid; // copy the current grid to a temporary grid

int row = 1;
int col = 1;

countNeighbors(TempGrid, row, col); // passes the TempGrid to countNieghbor method

for(row = 1; row < 18; row++){

countNeighbors(TempGrid, row, col);

for(col = 1; col < 18; col++){

countNeighbors(TempGrid, row, col);

if(countNeighbors(grid, row, col) == 3)
{
TempGrid[row][col] = true;
}
else if(countNeighbors(grid, row, col) == 2 || countNeighbors(grid, row, col) == 3)
{
TempGrid[row][col] = true;
}
else
{
TempGrid[row][col] = false;
}

}
}
}

public static int countNeighbors ( final boolean[][] grid, final int row, final int col )
{
int n = 0; //int used to store the # of neighbors
int temprow = row;
int tempcol = col;
//count # of neighbors for the cell on the edge but not the corner
for(temprow = row; temprow <= 18; temprow++)
{
for(tempcol = row; tempcol <= 18; tempcol++)
{
if(temprow == 1 || temprow == 18 || tempcol == 1 || tempcol ==18)
{
if(!(grid[1][1]) && !(grid[1][18]) && !(grid[18][1]) && !(grid[18][18]))
{
if(grid[temprow][tempcol] == true)
{
n++;
}
}
}
}
}


//count # of neighbors for the corner cells
for(temprow = row; temprow <= 18; temprow++)
{
for(tempcol = row; tempcol <= 18; tempcol++)
{
if(grid[1][1] || grid[1][18] || grid[18][1] || grid[18][18])
{
if(grid[temprow][tempcol] == true)
{
n++;
}
}
}
}

// count the cells that are not on the edge or corner
while(temprow >= 2 && tempcol >= 2 && temprow <= 17 && tempcol <= 17)
{
for(temprow = row; temprow-1 <= temprow+1; temprow++)
{
for(tempcol = col; tempcol-1 <= tempcol+1; tempcol++)
{
if(grid[temprow][tempcol] == true)
{
n++;
}
}
}
}
return n; // return the number of neighbors
}

最佳答案

没有完整的堆栈跟踪和问题所在的指示,这是我最好的猜测:

grid[18][1]

18超出了您可以访问的数组的大小,在Java中数组是从零开始的(0)。由于我在整个帖子中都看到了 17,这似乎是最合乎逻辑的原因。

关于java - 奇怪的 IndexOutOfBound 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com