3

this is my whole class ,I have added number 2 to the doubly linked list and then I want it to be be print in the concole but it will show this "datastructureproject.Node@f62373" thanks!

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: also this is my Node class, thanks!

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
  • 1
    Can you please reformat your code properly and provide the source of Node? Commented May 30, 2010 at 10:12

4 Answers 4

3

You've overridden toString() on the DoubleLinkedList but you're calling it on a Node. Call list.toString() or override Node.toString() if you only want to print the node's content.

Sign up to request clarification or add additional context in comments.

Comments

3

You need to override toString() in the Node class.

Comments

2

Your Node class does not override the toString() method and falls back to use the Object.toString() method instead.
Also I think it is a bit confusing that you add a value but return a Node instead of a value with get().

Update: to print the value of your Node add the following code to your Node class.

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

Or you can change the get method in DoublyLinkedList to

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 Comment

aha I get what you mean thanks for your complete and understandable answer.
1

The output is revealing:

"datastructureproject.Node@f62373"

This is what a class Node in package datastructureproject would return in its toString() that is inherited from Object.

You also need to @Override the public String toString() method in your Node class if you want the nodes themselves to return something else on toString().

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.