【发布时间】:2013-11-06 04:50:57
【问题描述】:
所以我不确定这在哪里超出了界限,你们都可以向我指出,可能它很愚蠢,但我真的很累,只是无法找出问题所在。我在每个 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
【问题讨论】:
-
您的异常应该准确地告诉您它超出范围的位置...
-
您在哪一行得到异常?如果我们不必自己搜索所有内容,这会让我们更容易找到问题;)
-
问题可能不在于您的
openNode.indexOf()而我认为它在您的nodeGrid[]中显示数组的初始化代码并给出getY()和getX()的值跨度> -
每个 openNode.get(openNode.indexOf(nodeGrid[][])).setParent();行(在 sn-ps 中添加构造函数)
-
我认为这里没有足够的信息。你能构造一个sscce吗?
标签: java indexoutofboundsexception