gpt4 book ai didi

java - java中数组越界异常

转载 作者:行者123 更新时间:2023-12-01 04:12:16 31 4
gpt4 key购买 nike

所以我不确定这哪里出了问题,你们都可以向我指出吗,可能这很愚蠢,但我真的很累,只是无法找出出了什么问题。我在每个 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()' 是否大于0但在该 block 内您正在使用getY()可能是-1`

看这个

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

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

关于java - java中数组越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19804366/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com