0

this is my code. but when i am running it instead of printing the list it gives me something like this " DoublyLinkedList$Node@3cd1a2f1Item: ". I have no idea how to fix it. i tried a lot trust me. Can somebody help please. Thank you :)

public class DoublyLinkedList<Item extends Comparable>{

class Node{
    private Item item;
    private Node next;
    private Node prev;

    public Node getNext() {
        return next;
    }

    public Node getPrev(){
        return prev;
    }

    public Item getItem(){
        return item;
    }

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


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

    public void setItem(Item item){
        this.item = item;
    }
}

private Node head;

private int numberOfEelements;

public void sortedAdd(Item newItem) {

    if (head == null) {
        head = new Node();
        head.setItem(newItem);
        return;
    }
        Node dummy = head;
        Node current = dummy.getNext();

        while ( current!= null && (newItem.compareTo(current.getItem()) > 0) && (current != dummy))
            current = current.getNext();
        Node temp = new Node();
        temp.setNext(current);

    if (current == null) {
        current = new Node();
        current.setItem(newItem);
        return;
    }
        temp.setPrev(current.getPrev());
        (current.getPrev()).setNext(temp);
        current.setPrev(temp);
        temp.setItem(newItem);
        ++numberOfEelements;
}
public void sortedRemove(Item newItem) {

    if (head == null) {
        head = new Node();
        head.setItem(newItem);
        return;
    }
    Node dummy = head;
    Node current = dummy.getNext();
    while(current!= null && (newItem.compareTo(current.getItem()) !=0) && (current!= dummy))
        current = current.getNext();


    if (current == null) {
        current = new Node();
        current.setItem(newItem);
        return;
    }

    if (newItem.equals(current.getItem())) {
        (current.getPrev()).setNext(current.getNext());
        (current.getNext()).setPrev(current.getPrev());
        --numberOfEelements;
    }
}

@Override
public String toString(){
    Node current = head;
    StringBuilder sb = new StringBuilder();
    while(current != null){
        sb.append(current).append("Item: " + " ");
        current = current.getNext();
    }
    return sb.toString();

}


public static void main(String[] args) {

    DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>();
        list.sortedAdd(1);
        list.sortedAdd(5);
        list.sortedAdd(7);
        list.sortedAdd(9);
        list.sortedAdd(3);
        list.sortedAdd(2);

        list.sortedRemove(3);

    System.out.println(list.toString());
}
}

2 Answers2

4

Your Node class should override toString() method like this:

public String toString() {
    return null != item ? item.toString() : null;
}
bedrin
  • 4,458
  • 32
  • 53
  • 1
    But what if `item` does not override toString ? – Jean-François Savard Aug 10 '15 at 20:08
  • In given example `Item` is `Integer` which does implement `toString()` properly – bedrin Aug 10 '15 at 20:12
  • @bedrin it worked thank you so much for the help :) . but it just prints the first item which is "1". do i have to iterate using a for loop or what to print the entire list? – user3242013 Aug 10 '15 at 20:13
  • @user3242013 the `toString()` already iterates over the list - there must be an issue in your sortedAdd or sortedRemove methods. Debug your code to find the cause – bedrin Aug 10 '15 at 20:16
  • I'm having a similar issue, my toString() method isn't working properly and I've looked everywhere around the internet, could you take a look at my question in regards to this and help me out? – Adan Vivero Mar 19 '19 at 00:56
0

Add toString() to Node, eg:

  public String toString() {
    return null != item ? item.toString() : null;
  }

and fix sortedAdd(), eg:

public void sortedAdd(Item newItem) {

    // new list
    if (head == null) {
        head = new Node();
        head.setItem(newItem);
        ++numberOfEelements;
        return;
    }
    Node current = head;
    Node prev = null;
    while (current != null && (newItem.compareTo(current.getItem()) > 0)) {
        prev = current;
        current = current.getNext();
    }
    // the last
    if (current == null) {
        current = new Node();
        current.setItem(newItem);
        current.setPrev(prev);
        prev.setNext(current);
        ++numberOfEelements;
        return;
    }
    //the first
    if (prev == null){
        prev = new Node();
        prev.setItem(newItem);
        current.setPrev(prev);
        prev.setNext(current);
        head = prev;
        ++numberOfEelements;
        return;
    }
    Node temp = new Node();
    temp.setNext(current);
    temp.setPrev(current.getPrev());
    (current.getPrev()).setNext(temp);
    current.setPrev(temp);
    temp.setItem(newItem);
    ++numberOfEelements;
}
marekzbrzozowa
  • 382
  • 1
  • 3
  • 11