我正在使用递归方法制作扫雷器,以打开与块“ 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;
    }
}

最佳答案

没有看到更多代码,尤其是removalList的声明,我只能猜测。我的猜测是,removalList具有gameWidth * gameHeight元素。因此,索引从0gameWidth - 1,从0gameHeight - 1。您的检查允许的索引最多为gameWidthgameHeight,这将导致您遇到异常。

关于java - 线程“AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:10,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16161959/

10-16 16:01