因此,我不确定这将超出什么范围,您是否可以全部向我指出,这可能是愚蠢的,但我真的很累,无法找出问题所在。我在每个openNode.indexOf()上都遇到了错误。同样通过打印N值,我知道N.getX()或N.getY()永远不会低于1。

    if(N.getX() > 0)
    {
        flag = false;
        if(!isTilePassable(nodeGrid[N.getX()-1][N.getY()].getX() * 32, nodeGrid[N.getX()-1][N.getY()].getY() * 32)) //west
            closedNode.add(nodeGrid[N.getX()-1][N.getY()]);

        for(Node e : closedNode)
            if(e.equals(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])))
                flag = true;
        if(!flag)
        {
            openNode.get(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])).setDistance(SRC);
            openNode.get(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])).setParent(N);
        }
    }

    if(N.getY() > 0)
    {
        flag = false;
        if(!isTilePassable(nodeGrid[N.getX()][N.getY()-1].getX() * 32, nodeGrid[N.getX()][N.getY()-1].getY() * 32)) //north
            closedNode.add(nodeGrid[N.getX()][N.getY()-1]);

        for(Node e : closedNode)
            if(e.equals(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])))
                flag = true;
        if(!flag)
        {
            openNode.get(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])).setDistance(SRC);
            openNode.get(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])).setParent(N);
        }
    }


这是nodeGrid的初始化,并分配x + y值Node对象采用x和y的参数

    for(int i = 0; i < 36; i++)
        for(int ii = 0; ii < 25; ii++)
            nodeGrid[i][ii] = new Node(i,ii);   //initializes node grid

最佳答案

问题可能与您的openNode.indexOf()不相关,而我认为这与您的nodeGrid[][]有关。

从初始化部分给出的N.getX()大于或等于36或小于0和/或N.getY()-1大于或等于25或小于0。

并且由于您已经说过这些值在某个时候达到-1,但是您通过检查N.getxX()>0添加了对此的检查,在检查getX()' to be greater than 0 but inside that block you are using getY() -1`

看到这个

if(N.getX() > 0) {
// more code
if(e.equals(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()]))) // you are using getY


在这里,您正在检查which could be而不是X,因此它可能会触发异常。如果您提供堆栈跟踪,则可以提供更多帮助。

关于java - Java中的数组超出范围异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19804366/

10-12 01:45