获取IndexOutOfBoundsException:-1,当没有涉及负数时

时间:2017-11-13 11:47:45

标签: java arraylist indexoutofboundsexception adjacency-matrix

我一直在创建一个图形来运行我的A *实现,我似乎陷入了某个错误,无法找到一个节点的邻居。我的逻辑是在我的2D ArrayList中代表一个邻接矩阵,我在列表1:节点abcd,在列表2中,节点abcd,它们遇到的索引应该有一个非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);
            }
        }
    }

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

2 个答案:

答案 0 :(得分:2)

你确定,a值是否在矩阵中?如果没有那么

matrix.indexOf(a)

可能会在找不到此值时返回-1。

答案 1 :(得分:0)

你已经在-1中编码了

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

非常确定异常的原因,因此创建了nodes但它没有元素(零大小减去1返回-1)。但如果没有完整的运行示例,很难说。这不是代码问题,而是样本数据问题。请包含完整运行的代码。