线程“awteventque0”java中的数组异常。lang.ArrayIndexOutofBounds异常:10
我正在制作一个扫雷艇,使用递归方法打开块“0”附近的所有瓷砖
一切顺利,直到我得到我在标题中提到的例外。异常在if(removalList[num1][num2] == 1){return;}
触发,但请确保将删除列表中的所有初始值设置为零。(供参考,1
表示该项已添加到removalList
中,以便以后删除)
我还通过执行if(num1 > gameWidth || num2 > gameHeight || num1 < 0 || num2 < 0){return;}. (gameHeight and width are both 10)
检查了它是否在边界内,但出于某种原因,它认为它超出了边界
谢谢你的帮助
private void function(int c5, int r5)
{
int num1 = c5;
int num2 = r5;
if(num1 > gameWidth || num2 > gameHeight || num1 < 0 || num2 < 0)
{
return;
}
if(removalList[num1][num2] == 1)
{
return;
}
if(blocks[num1][num2] == 0)
{
System.out.println("Added (" + num1 + ", " + num2 + ") to removal list.");
removalList[num1][num2] = 1;
function(num1-1, num2);
function(num1, num2-1);
function(num1+1, num2);
function(num1, num2+1);
}
else if(blocks[num1][num2] > 0 && blocks[num1][num2] < 9)
{
removalList[num1][num2] = 1;
return;
}
else
{
return;
}
}
# 1 楼答案
没有看到更多的代码,特别是
removalList
的声明,我只能猜测。我的猜测是,removalList
有gameWidth * gameHeight
个元素。因此,指数从0
到gameWidth - 1
,从0
到gameHeight - 1
。您的检查允许索引最多为gameWidth
和gameHeight
,这将导致您得到的异常# 2 楼答案
如果数组的大小为
10
,则数组中可能的最大可访问索引为array[size-1]
。如果您试图访问一个大于或等于大小的索引,那么您将得到一个ArrayIndexOutOfBoundsException
例如:-
因此,在你的情况下
removalList[9][9]
是允许的,但是removalList[10][10]
将给出数组索引边界外异常