我一直在创建一个图形来运行我的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);
}
}
}
每次添加节点时都会更新矩阵的大小。 我希望这不是一个案例,答案只是盯着我,但我太累了,看不到它。谢谢你的帮助!
答案 0 :(得分:2)
你确定,a值是否在矩阵中?如果没有那么
matrix.indexOf(a)
可能会在找不到此值时返回-1。
答案 1 :(得分:0)
你已经在-1中编码了
for(int i = 0; i < nodes.size() - 1; i ++){
非常确定异常的原因,因此创建了nodes
但它没有元素(零大小减去1返回-1)。但如果没有完整的运行示例,很难说。这不是代码问题,而是样本数据问题。请包含完整运行的代码。