2010-04-20 110 views
0

我试图通过DFS解决迷宫,使用adj List来表示图的顶点和边。共有12个节点(3行[A,B,C] * 4 cols [0,..,3])。我的程序首先保存所有顶点标签(A0,.. C3),然后检查相邻节点,如果可以移动,也没有问题,它会继续创建边缘,在这里它会出现错误。ArrayList <String> NullPointerException

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

我使用的调试,发现vList[j].label不为空它包含了一个正确的字符串(即“B1”)。显示为空的唯一变量是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 
    } 
    ... 
} 

我真的appreaciate如果任何人都可以点我在正确的轨道改编职系,以什么它去错了...谢谢!

+1

运行您应该做的是更改代码以使每行有一条语句。 adjList [i] .add(vList [j] .label);应该是 ArrayList alTmp = adjList [i]; WhateverType vTmp = vList [j]; String label = vTmp.label; alTmp.add(label); 然后看看你在调试器遇到问题的地方 – 2010-04-20 03:18:58

回答

3

您已经创建了该阵列,但仍需要经过并创建ArrayList对象。在写入之后,adjList[i]返回null,因为还没有分配给它。

+0

@Joel:编写这个“adjList [i] .contains(vList [j] .label)是否正确” – Carlos 2010-04-20 03:48:08

+0

你的addEdge方法很好。你只是没有正确地初始化你的数据结构。您需要在构造函数中使用'adjList [i] = new ArrayList ();'或者,您可以修改addEdge以测试null,并创建ArrayList(如果它尚不存在)。 – Joel 2010-04-20 04:46:23

1

我看到你创建了容器,但你确定你用元素填充了列表吗? 为什么不加到addEdge只是为了确定它们中的任何一个不是null。用java -ea ...

相关问题