【问题标题】:Getting an IndexOutOfBoundsException: -1 when no negative numbers are involved获取 IndexOutOfBoundsException:-1 不涉及负数时
【发布时间】:2017-11-13 11:47:44
【问题描述】:

我一直在创建一个图表来运行我的 A* 实现,但我似乎在查找节点的邻居时遇到了某个错误。我的逻辑是,在表示邻接矩阵的 2D ArrayList 中,我在列表 1 中有:节点 a b c d,在列表 2 中有节点 a b c d,它们相遇的索引应该有一个不是 0 的值,以表明存在边缘。这就是我在这里尝试做的事情:

public List<Node> neighbours(Node a){
        List<Node> neighbours = new ArrayList<Node>();
        for(int i = 0; i < nodes.size() - 1; i ++){
            int n = matrix.get(matrix.indexOf(a)).get(i);
            if (n != 0){
                neighbours.add(nodes.get(i));
            }
        }
        return neighbours;
    }

但是我得到了一个很好的Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 错误,我已经盯着它看了 30 分钟,但我不知道这个 -1 是从哪里来的。我还将添加构建矩阵的代码,因为这可能会提供线索:

public void addNode (Node a){
        int count = 0;
        nodes.add(a);
        matrix.add(new ArrayList<Integer>(nodes.size()));
        for (List<Integer> list : matrix){
            count++;
            int diff = Math.abs(nodes.size() - list.size());
            if (diff != 0){
                for (int i = 0; i < diff; i ++)
                    matrix.get(count-1).add(0);
            }
        }
    }

每次添加节点时,我都会更新矩阵的大小。 我希望这不是答案只是盯着我看的情况,但我太累了,看不到它。感谢您的帮助!

【问题讨论】:

    标签: java arraylist indexoutofboundsexception adjacency-matrix


    【解决方案1】:

    你确定那个值 a 在矩阵中吗?如果没有那么

    matrix.indexOf(a)
    

    当未找到该值时可能返回 -1。

    【讨论】:

      【解决方案2】:

      您已经在以下位置编码了 -1:

          for(int i = 0; i < nodes.size() - 1; i ++){
      

      很确定异常的原因,所以 nodes 已创建,但其中没有元素(零作为大小减一返回 -1)。但是如果没有完整的运行示例,就很难说。这不是代码的问题,而是示例数据的问题。请包含一个完全运行的代码。

      【讨论】:

      • 它很长,所以我不想打扰别人,但谢谢你的回答,我会调查一下。
      • 这是一个误导性的答案。 -1 不是来自条件。在这种情况下,不会执行循环。实际的解释是关于 Szymon 的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多