0

我试图通过 DFS 解决迷宫,使用 adj List 来表示图的顶点和边。总共有 12 个节点(3 rows[A,B,C] * 4 cols[0,..,3])。我的程序首先保存所有顶点标签(A0,..C3),到目前为止一切顺利,然后检查相邻节点,也没有问题,如果可以移动,它会继续创建边,这里是哪里出错了.

   adjList[i].add(vList[j].label);

我使用了调试器,发现它vList[j].label不是空的,它包含一个正确的字符串(即“B1”)。唯一显示 null 的变量是 in adjList[i],这让我相信我错误地实现了它。我就是这样做的。

public class GraphList {
   private ArrayList<String>[] adjList;
   ...
   public GraphList(int vertexcount) {
      adjList = (ArrayList<String>[]) new ArrayList[vertexCount];
      ...
   }
   ...
   public void addEdge(int i, int j) {  
      adjList[i].add(vList[j].label);    //NULLPOINTEREXCEPTION HERE
   }
   ...
}

如果有人能指出我在正确的轨道上重新考虑出了什么问题,我会非常感激......谢谢!

4

2 回答 2

3

您已经创建了数组,但您仍然需要遍历并创建ArrayList对象。如其所写,adjList[i]返回 null 因为尚未为其分配任何内容。

于 2010-04-20T03:14:46.377 回答
1

我看到你创建了容器,但你确定你用元素填充了列表吗?您为什么不添加assert((adjList[i] != null) && (adjList[j] != null))addEdge确保它们中的任何一个都不是null. 运行java -ea ...

于 2010-04-20T03:17:40.570 回答