почему метод toString здесь не работает? - PullRequest
1 голос
/ 30 мая 2010

это весь мой класс, я добавил номер 2 в двусвязный список, и затем я хочу, чтобы он был напечатан в консоли, но он покажет этот "datastructureproject.Node@f62373" спасибо!

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;
}
}

Ответы [ 4 ]

3 голосов
/ 30 мая 2010

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

3 голосов
/ 30 мая 2010

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

1 голос
/ 30 мая 2010

Ваш класс Node не переопределяет метод toString () и возвращается к использованию метода Object.toString ().
Также я думаю, что это немного сбивает с толку, что вы добавляете значение, но возвращаете Node вместо значения с помощью get (). * * 1003 Обновление: чтобы напечатать значение вашего узла, добавьте следующий код в ваш класс узла.

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

Или вы можете изменить метод get в 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();
    }
}
1 голос
/ 30 мая 2010

Вывод показывает:

"datastructureproject.Node@f62373"

Это то, что class Node в package datastructureproject вернулось бы в его toString() который унаследован от Object.

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

...