2010-04-20 108 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 ...

相關問題