2014-03-19 66 views
1

我一直在努力的練習,以更好地瞭解鏈接列表。爲什麼我會在鏈接列表中找到額外的引用對象?

我的輸出是:
*** DISPALY名字 三木 空 Arek 空 賢士 空


問題:名之間顯示空值。

試圖做:寫了一堆打印語句,它看起來像添加額外的名稱引用對象到列表。我試圖在添加方法中發現錯誤,但邏輯上一切都罰款給我。

我不允許使用LinkedList API。

謝謝你的幫助。

<pre> <code> 
public class NameTest { 

public static void main(String[] args) { 
    NameList<Name> n = new NameList<Name>(); 
    Name n1 = new Name(1,"Miki"); 
    Name n2 = new Name(2, "Arek"); 
    Name n3 = new Name(3, "Magi"); 

    n.addName(n1); 
      n.addName(n2); 
      n.addName(n3); 
    n.displayNames(); 
    System.out.println("*******************\n"); 
    } 
} 

public class Name { 

private int nameId; 
private String firstName; 
private Name next; 

public Name() { } 

public Name(int nameId, String firstName) { 
    super(); 
    this.nameId = nameId; 
    this.firstName = firstName; 
    this.next = new Name(); 
} 

public int getNameId() { 
    return nameId; 
} 

public void setNameId(int nameId) { 
    this.nameId = nameId; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public Name getNext() { 
    return next; 
} 

public void setNext(Name next) { 
    this.next = next; 
} 
} 

public class NameList<T extends Name> { 

private T head; 
private int value; 

public NameList() { 
    head = null; 
    value = 0; 
} 

public T getHead() { 
    return head; 
} 

public void setHead(T head) { 
    this.head = head; 
} 

public void addName(T name) { 
    if(head == null) { 
     setHead(name); 
     value++; 
    } 
    else {  
     T curr = getHead(); 
     while(curr.getNext() != null) { 
      curr = (T) curr.getNext(); 
     } 
     curr.setNext(name); 
     value++; 
    } 
} 

public void displayNames() { 
    System.out.println("***DISPLAY NAMES "); 
    T curr = getHead(); 

    while(curr.getNext() != null) { 
     System.out.println(curr.getFirstName()); 
     curr = (T) curr.getNext(); 
    } 
    if(curr.getNext() == null) { 
     System.out.println(curr.getFirstName()); 
    } 
} 

實例變量未來的類名應該是這樣的:下一個專用名稱;我很抱歉混淆。我在上面的代碼中進行了更正。

回答

2

你的問題是這條線。

this.next = new Name(); 

你要添加一個新的「空對象」到你添加的每個Name的背面。刪除它,你會得到所需的結果。 (我假設你在那裏也有Name extends Employee,否則這個不會編譯)。

+0

謝謝你的建議。類名稱中的實例變量應該如下所示:private Name next;我很抱歉的混淆。我在上面的代碼中進行了更正。也許這是一個有趣的問題,但我應該如何在重載的構造函數中實例化「next」?我只有一個想法,但我不確定它是否正確next = null; – user1282256

+1

你可以寫'next = null;'但你不需要。對象類型的實例變量總是默認爲null。 –

相關問題