2011-11-30 36 views
6

所以,我有一個空列表,像這樣增加空單

List<Node> nodes = null; 

,然後我想補充的「節點」 S進去

try { 
     File file = new File("test.txt"); 
     Scanner scanner = new Scanner(file); 
     while (true){ 

      String first= scanner.next(); 
      if (first.equals("-1")){ 
       break; 
      } 
      Node node1= new Node(first, first); 
      if (nodes==null){ 
       nodes.add(node1); 
      } 
      if (nodes!=null){ 
       if(nodes.contains(node1)){ 
        nodes.add(node1); 

       } 
      } 

所以,很顯然這樣做。載在一個空列表給我一個異常錯誤,但爲什麼這麼做

if (nodes==null){ 
    nodes.add(node1); 
} 

也給我一個空指針錯誤? 看起來空列表是不可變的。我怎麼能仍然保持一個List結構,並仍然從空構建呢?

回答

1

在添加節點之前,您必須將內存分配給列表:nodes = new ArrayList<Node>();。您正嘗試將節點添加到空列表中,即將節點添加到空。

+2

你不能實例化'List'接口:) – Bozho

+0

哎呀,應該是'ArrayList'或類似的。我會編輯我的答案。爲此歡呼。 –

8
List<Node> nodes = null; 

這不是一個空的列表,這是一個列表引用,它被iniitalized爲null。你想要:

List<Node> nodes = new LinkedList<Node>(); 

或類似。這給你一個空的列表。

編輯:問題的變化之後,這個邏輯是完全搞砸了:

Node node1= new Node(first, first); 
if (nodes==null){ 
    nodes.add(node1); 
} 
if (nodes!=null){ 
    if(nodes.contains(node1)){ 
     nodes.add(node1); 

    } 
} 

什麼你在這裏說的是,如果節點== NULL(它現在還不是),然後嘗試將節點添加到列表中。如果它不爲空,並且node1已經在列表中(它不是),那麼將它添加到列表中。您可以替換線以上:

if (!nodes.contains(node1)) { 
    nodes.add(node1); 
} 

如果節點不在列表中存在它說,添加它。

1

您需要initalize列表第一

nodes = new ArrayList<Node>(); 

例如:

if (nodes==null){ 
    nodes = new ArrayList<Node>(); 
    nodes.add(node1); 
} 

但它確實是最好有一個空列表,而不是一個不initialzed(空)名單。

所以不是:List<Node> nodes = null;List<Node> nodes = new ArrayList<Node>();,那麼你就能取出完整的if和使用始終nodes.add(node1);,不管它是第一個或第二個元素。

0
nodes = new ArrayList<Node>(); 

初始化它到一個新的對象(空)應該有所幫助。

+0

我只是犯了同樣的錯誤,你不能實例化一個'List',它必須是一個'ArrayList'或'LinkedList'等當然是 –

+0

!感謝您指出。仍然在C#模式,我猜:) – abhinav

+0

哈哈沒有後顧之憂。我收到了一條評論,告訴我與我的答案相同。我處於C++模式。 –

1

如果nodesnull,你不能對它做任何事情。初始化爲new ArrayList<Node>()。這現在是一個空的列表。

0

這是一個肯定的空指針異常爲nodes是空

你的意思

if (nodes!=null){ 
    nodes.add(node1); 
} 

而且初始化列表

nodes = new ArrayList() 
1

這是因爲你還沒有實例化你的對象「節點」。

添加以下行,它應該工作:

if (nodes==null){ 
     nodes = new ArrayList<Node>(); 
     nodes.add(node1); 
    } 

另外請注意,你不能實例化對象的列表。所以你可以使用像ArrayList/LinkedList等

0

nodenull所以這是像所有說的錯誤...這是最常見的編程錯誤獲得null pointer exception。它更好地使用findbug插件與您的日食;它不會允許你創建這種錯誤。此外,您將更容易檢測到問題。