Printing out a linked list using toString

后端 未结 5 1584
耶瑟儿~
耶瑟儿~ 2020-12-06 13:19

Ok guys, so I am trying to learn how to print out a linked list. I have all the methods that I would need to use for the list, but I can\'t figure out how to display the va

相关标签:
5条回答
  • 2020-12-06 13:54

    When the JVM tries to run your application, it calls your main method statically; something like this:

    LinkedList.main();
    

    That means there is no instance of your LinkedList class. In order to call your toString() method, you can create a new instance of your LinkedList class.

    So the body of your main method should be like this:

    public static void main(String[] args){
        // creating an instance of LinkedList class
        LinkedList ll = new LinkedList();
    
        // adding some data to the list
        ll.insertFront(1);
        ll.insertFront(2);
        ll.insertFront(3);
        ll.insertBack(4);
    
        System.out.println(ll.toString());
    }
    
    0 讨论(0)
  • 2020-12-06 13:56

    As has been pointed out in some other answers and comments, what you are missing here is a call to the JVM System class to print out the string generated by your toString() method.

    LinkedList myLinkedList = new LinkedList();
    System.out.println(myLinkedList.toString());
    

    This will get the job done, but I wouldn't recommend doing it that way. If we take a look at the javadocs for the Object class, we find this description for toString():

    Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

    The emphasis added there is my own. You are creating a string that contains the entire state of the linked list, which somebody using your class is probably not expecting. I would recommend the following changes:

    1. Add a toString() method to your LinkedListNode class.
    2. Update the toString() method in your LinkedList class to be more concise.
    3. Add a new method called printList() to your LinkedList class that does what you are currently expecting toString() to do.

    In LinkedListNode:

    public String toString(){
       return "LinkedListNode with data: " + getData();
    }
    

    In LinkedList:

    public int size(){
        int currentSize = 0;
        LinkedListNode current = head;
        while(current != null){
            currentSize = currentSize + 1;
            current = current.getNext();
        }
    
        return currentSize;
    }
    
    public String toString(){
        return "LinkedList with " + size() + "elements.";
    }
    
    public void printList(){
        System.out.println("Contents of " + toString());
    
        LinkedListNode current = head;
        while(current != null){
            System.out.println(current.toString());
            current = current.getNext();
        }
    
    }
    
    0 讨论(0)
  • 2020-12-06 14:03

    I do it the following way:

    public static void main(String[] args) {
    
        LinkedList list = new LinkedList();
        list.insertFront(1);
        list.insertFront(2);
        list.insertFront(3);
        System.out.println(list.toString());
    }
    
    String toString() {
        StringBuilder result = new StringBuilder();
        for(Object item:this) {
            result.append(item.toString());
            result.append("\n"); //optional
        }
        return result.toString();
    }
    
    0 讨论(0)
  • 2020-12-06 14:06

    A very simple solution is to override the toString() method in the Node. Then, you can call print by passing LinkedList's head. You don't need to implement any kind of loop.

    Code:

    public class LinkedListNode {
        ...
    
        //New
        @Override
        public String toString() {
            return String.format("Node(%d, next = %s)", data, next);
        }
    } 
    
    
    public class LinkedList {
    
        public static void main(String[] args) {
    
            LinkedList l = new LinkedList();
            l.insertFront(0);
            l.insertFront(1);
            l.insertFront(2);
            l.insertFront(3);
    
            //New
            System.out.println(l.head);
        }
    }
    
    0 讨论(0)
  • 2020-12-06 14:10
    public static void main(String[] args) {
    
        LinkedList list = new LinkedList();
        list.insertFront(1);
        list.insertFront(2);
        list.insertFront(3);
        System.out.println(list.toString());
    }
    
    String toString() {
                String result = "";
                LinkedListNode current = head;
                while(current.getNext() != null){
                    result += current.getData();
                    if(current.getNext() != null){
                         result += ", ";
                    }
                    current = current.getNext();
                }
                return "List: " + result;
    }
    
    0 讨论(0)
提交回复
热议问题