繁体   English   中英

Java中的数组超出范围异常

[英]Array out of bounds exception in java

因此,我不确定这将超出什么范围,您是否可以全部向我指出,可能是愚蠢的,但我真的很累,无法找出问题所在。 我在每个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仍然浪费了精力。 getX()' to be greater than 0, but inside that block you are using getY() which could be -1`

看到这个

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

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

nodeGrid[N.getX()-1][N.getY()]与closedNode一起使用,在那里没有发生错误,只有openNode为空,在这种情况下, openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])将返回-1, openNode.get(-1)将超出范围

感谢您的所有帮助,但我发现我犯了一个愚蠢的错误。 使用indexOf()来搜索nodeGrid来检索与openNode相同的X和Y值,尽管我的距离变量不同,所以由于openNode中没有该变量,所以它不断返回-1作为索引位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM