[英]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.