【问题标题】:Array out of bounds exception in javajava中的数组越界异常
【发布时间】: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


【解决方案1】:

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

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

并且由于您已经说过这些值在某个时候达到 -1,但是您通过检查 N.getxX()&gt;0 添加了一个检查,当您检查 getX()' to be greater than0but 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,因此它可能会触发异常。如果您提供堆栈跟踪,可以提供更多帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-25
        • 2020-08-14
        • 1970-01-01
        相关资源
        最近更新 更多