“线程中的异常”;AWT-EventQueue-0“;java.lang.ArrayIndexOutofBounds异常:10

“线程中的异常”;AWT-EventQueue-0“;java.lang.ArrayIndexOutofBounds异常:10,java,arrays,indexing,Java,Arrays,Indexing,我正在制作一个扫雷艇,使用递归方法打开块“0”附近的所有瓷砖 一切顺利,直到我得到我在标题中提到的例外。如果(removalList[num1][num2]==1){return;},则在处触发异常,但请确保将移除列表中的所有初始值设置为零。(仅供参考,1表示该项目已添加到removalList中,以便以后删除) 我还通过执行if(num1>gameWidth | | | num2>gameHeight | | num1gameHeight | | num1

我正在制作一个扫雷艇,使用递归方法打开块“0”附近的所有瓷砖

一切顺利,直到我得到我在标题中提到的例外。如果(removalList[num1][num2]==1){return;},则在
处触发异常,但请确保将移除列表中的所有初始值设置为零。(仅供参考,
1
表示该项目已添加到
removalList
中,以便以后删除)

我还通过执行
if(num1>gameWidth | | | num2>gameHeight | | num1<0 | | num2<0){return;}检查它是否在边界内。(游戏高度和宽度都是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;
    }
}
private void函数(intc5,intr5)
{
int num1=c5;
int num2=r5;
如果(num1>gameWidth | | num2>gameHeight | | num1<0 | | num2<0)
{
返回;
}
如果(移除列表[num1][num2]==1)
{
返回;
}
if(块[num1][num2]==0)
{       
System.out.println(“将(“+num1+”,“+num2+”)添加到删除列表中”);
移除列表[num1][num2]=1;
功能(num1-1,num2);
功能(num1,num2-1);
函数(num1+1,num2);
函数(num1,num2+1);
}
else if(块[num1][num2]>0和块[num1][num2]<9)
{
移除列表[num1][num2]=1;
返回;
}
其他的
{
返回;
}
}

如果数组的大小为
10
,则数组中最大可能的可访问索引将为
数组[size-1]
。如果尝试访问大于或等于大小的索引,则会得到一个称为
ArrayIndexOutOfBoundsException的异常

例如:-

int[] test = new int[5];
test[0] = 1; // Allowed
test[1] = 2; // Allowed
test[2] = 3; // Allowed
test[3] = 4; // Allowed
test[4] = 5; // Allowed
test[5] = 6; // NOT Allowed - You'll get the ArrayIndexOutOfBoundsException here.
因此,在你的情况下


removalList[9][9]
是允许的,但是
removalList[10][10]
将给出数组索引outofboundsException

而不需要看到更多的代码,特别是
removalList
的声明,我只能猜测。我猜,
removalList
包含
gameWidth*gameHeight
元素。因此,指数从
0
gameWidth-1
,从
0
gameHeight-1
。您的检查允许索引最多为
gameWidth
gameHeight
,这将导致您获得异常