2013-10-02 27 views
0

我最近開始學習Java,最後一件事是我通過泛型編程和現在鏈接列表。現在,我試圖從鏈表中實現節點類作爲泛型,但我遇到了一些麻煩。我試圖聲明一個toString方法,它可以迭代這個鏈表並打印它的元素,但是我每次撥打link.toString()都會收到NullPointerException,我很困惑我爲什麼會出現這個錯誤。我知道我的toString方法的格式效率並不高,但我試圖按照我的書籍說明進行操作。我正在展示我的Node課程和一個應用程序。實現節點作爲通用類

public class GenericNode<E> { 

    private E data; 
    private GenericNode<E> link; 
    public GenericNode(E intialData, GenericNode<E> initialLink){ 
     data=intialData; 
     link=initialLink; 

    } 
    public GenericNode<E> addNodeAfter(E element) { 
     link = new GenericNode<E>(element, link); 
     return link; 
    } 

    public String toString(){ 


     String field1=" "; 
     String field2=" "; 
     String result=" "; 

     if(data==null){ 
      field1="dummy"; 
      System.out.println("in dummy"); 
     } 
     field1="Data: "+ data.toString()+ "\n"; 
     if(link==null){ 
      field2="null in tail!"; 
      System.out.println("in tail"); 
     } 
     field2="link: data: "+link.data.toString() ; 


     if(link!=null){ 
      result=field1+field2+link.toString(); 
     } 

     return field1+field2; 

    } 
} 

public class NodeAppilication { 

    public static void main(String[] args){ 

     GenericNode<String> head=new GenericNode<String>("Paul", null); 
     GenericNode<String> tail=new GenericNode<String>("Saul",head.addNodeAfter("Saul")); 
     //figure 1 
     System.out.print(head.toString()); 
     //figure2 
     tail.toString(); 

     GenericNode<String> dummy=new GenericNode<String>(null,head); 

    } 

} 

回答

1

您的null檢查缺少else

if(data==null){ 
    field1="dummy"; 
    System.out.println("in dummy"); 
} else { // <<== Add an "else" here 
    field1="Data: "+ data.toString()+ "\n"; 
} 
if(link==null){ 
    field2="null in tail!"; 
    System.out.println("in tail"); 
} else { // <<== And here... 
    field2="link: data: "+link.data.toString(); 
} 

目前,null你的代碼檢查,套field1field2爲默認值,然後立即嘗試解引用datalink,導致 空指針異常。

+0

非常感謝你的幫助,我實現了這個代碼,它的工作,不再得到NullPointerException,我只是有一個問題,根據這個問題的說明我想這個輸出:data:保羅 鏈接:data:Saul 鏈接:null在尾巴!然而,我沒有得到最後一行,它表明我的尾巴沒有指向任何東西,是因爲我實現了頭部和尾部的方式?再次感謝你,我真的很感謝你的幫助! – user2012891

+0

@ user2012891您當前的代碼需要經過兩個鏈接,並以此結束。您需要添加一個循環來瀏覽鏈接,以便您可以打印任意長度的列表。 – dasblinkenlight