2010-05-30 5 views
1

это мой весь класс, я добавил номер 2 в список, дважды связанный, и затем я хочу, чтобы он был напечатан в коммоне, но он покажет это «[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()); 
    } 
} 

EDITED: также это мой класс узлов, спасибо!

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

Можете ли вы переформатировать ваш код правильно и обеспечить источник узла? –

+0

Я отредактировал мое сообщение! – user329820

ответ

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

+0

aha Я получаю то, что вы имеете в виду, спасибо за ваш полный и понятный ответ. – user329820

3

Вы переопределены toString() на DoubleLinkedList но вы вызываете его на Node. Вызовите list.toString() или переопределите Node.toString(), если вы хотите только распечатать содержимое узла.

3

Вам необходимо переопределить toString() в классе Node.

1

Выход показательно:

"[email protected]"

Это то, что в package datastructureprojectclass Node вернется в toString(), который наследуется от Object.

Вы также должны @Override метод public String toString() в вашем Node классе, если вы хотите, чтобы узлы сами вернуть что-то еще на toString().

Смежные вопросы