1

所以我不确定这在哪里超出了界限,你们都可以向我指出,可能它有些愚蠢,但我真的很累,只是无法找出问题所在。我在每个 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 值的分配节点对象接受 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
4

3 回答 3

0

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

于 2013-11-06T13:52:32.510 回答
0

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

于 2013-11-06T05:56:17.953 回答
0

问题可能不在于您,openNode.indexOf()而我认为它在您的nodeGrid[][].

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

并且由于您已经说过这些值在某个时候达到-1,但是您已经添加了一个检查,通过检查N.getxX()>0它仍然是浪费精力,因为您检查了getX()' to be greater than0 but inside that block you are usinggetY() 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这样它可能会触发异常。如果您提供堆栈跟踪,可以提供更多帮助。

于 2013-11-06T05:13:36.783 回答