因此,我不确定这将超出什么范围,您是否可以全部向我指出,这可能是愚蠢的,但我真的很累,无法找出问题所在。我在每个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/