2010-05-30 86 views
1

這是我的全班同學,我在雙向鏈表中添加了第二個數字,然後我希望它可以在concole中打印,但它會顯示「[email protected]」 謝謝!爲什麼toString方法在這裏不起作用?

package datastructureproject; 

public class DoublyLinkedList { 
private Node head = new Node(0); 
private Node tail = new Node(0); 
private int length = 0; 

public DoublyLinkedList() { 

    head.setPrev(null); 
    head.setNext(tail); 
    tail.setPrev(head); 
    tail.setNext(null); 
} 

public void add(int index, int value) throws IndexOutOfBoundsException { 
    Node cursor = get(index); 
    Node temp = new Node(value); 
    temp.setPrev(cursor); 
    temp.setNext(cursor.getNext()); 
    cursor.getNext().setPrev(temp); 
    cursor.setNext(temp); 
    length++; 
} 

private Node get(int index) throws IndexOutOfBoundsException { 
    if (index < 0 || index > length) { 
     throw new IndexOutOfBoundsException(); 
    } else { 
     Node cursor = head; 
     for (int i = 0; i < index; i++) { 
      cursor = cursor.getNext(); 
     } 
     return cursor; 
    } 
} 

public long size() { 
    return length; 
} 

public boolean isEmpty() { 
    return length == 0; 
} 
@Override 
public String toString() { 
StringBuffer result = new StringBuffer(); 
result.append("(head) - "); 
Node temp = head; 
while (temp.getNext() != tail) { 
    temp = temp.getNext(); 
    result.append(temp.getValue() + " - "); 
} 
result.append("(tail)"); 
return result.toString(); 
} 

public static void main(String[] args){ 
    DoublyLinkedList list = new DoublyLinkedList(); 
    list.add(0,2); 
    System.out.println(list.get(0).toString()); 
    } 
} 

編輯:這也是我的Node類,謝謝!

class Node { 

public int value; 

public Node(){ 

} 

public void setValue(int value) { 
    this.value = value; 
} 
public Node next; 
public Node prev; 

public Node(int value) { 
    this.value = value; 
} 

public Node(int value, Node prev, Node next) { 
    this.value = value; 
    setNext(next); 
    setPrev(prev); 
} 

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

public void setPrev(Node prev) { 
    this.prev = prev; 
} 

public Node getNext() { 
    return next; 
} 


public Node getPrev() { 
    return prev; 
} 

public int getValue() { 
    return value; 
} 
} 
+1

get方法能否請您正確格式化您的代碼,並提供節點的來源是什麼? – 2010-05-30 10:12:55

+0

我已編輯我的文章! – user329820 2010-05-30 11:18:01

回答

1

您的Node類不會覆蓋toString()方法,而是回退以使用Object.toString()方法。
此外,我認爲你添加一個值,但返回一個節點而不是get()的值是有點令人困惑。

更新: 打印您的節點的值將以下代碼添加到您的節點類。

@Override public String toString(){return ""+ value;} 

或者你可以改變DoublyLinkedList到

public int get(int index) throws IndexOutOfBoundsException { 
    if (index < 0 || index > length) { 
     throw new IndexOutOfBoundsException(); 
    } else { 
     Node cursor = head; 
     for (int i = 0; i < index; i++) { 
      cursor = cursor.getNext(); 
     } 
     return cursor.getValue(); 
    } 
} 
+0

好的,我怎樣才能得到價值? – user329820 2010-05-30 11:22:49

+0

aha我明白你的意思,謝謝你的完整和可以理解的答案。 – user329820 2010-05-30 11:37:32

3

你已經覆蓋上DoubleLinkedListtoString()但你稱它在Node。如果您只想打印節點的內容,請致電list.toString()或覆蓋Node.toString()

3

您需要重寫Node類中的toString()。

1

輸出透露:

[email protected]

這是在package datastructureproject一個class Node將在其toString()是從Object繼承返回。

如果您希望節點本身在toString()上返回其他內容,您還需要在Node類中@Overridepublic String toString()方法。

相關問題