2013-10-09 8 views
5

का उपयोग कर एक लिंक की गई सूची को प्रिंट करना ठीक है, इसलिए मैं एक लिंक की गई सूची को प्रिंट करने का तरीका सीखने की कोशिश कर रहा हूं। मेरे पास सूची के लिए उपयोग करने के लिए सभी विधियां हैं, लेकिन मैं यह नहीं समझ सकता कि नोड्स के मानों को कैसे प्रदर्शित किया जाए। अभी मेरी मुख्य विधि में कुछ भी नहीं है क्योंकि मुझे मुख्य में गैर स्थैतिक तरीकों को कॉल करने की कोशिश करने में त्रुटियां मिल रही हैं। मेरे पास एक टूस्ट्रिंग विधि है जो सूची की सामग्री प्रदर्शित करती है। मैं प्रत्येक नोड के मूल्य को प्रदर्शित करने के लिए इस toString को कॉल करने के बारे में कैसे जाउंगा? किसी भी सलाह की काफी सराहना की जाएगी। ,toString

public class LinkedList { 

    public LinkedListNode head; 

    public static void main(String[] args) { 

    LinkedList l = new LinkedList(); 
    l.insertFront(0); 
    System.out.println(l.toString()); 

    } 

    public LinkedList() { 
     this.head = null; 
    } 

    public int removeFront(){ 
     if(head == null){ 
      System.out.println("Error - Attempting to call removeFront() on empty list"); 
      return 0; 
     }else{ 
      int temp = head.getData(); 
      head = head.getNext(); 
      return temp; 
     } 

    } 

    public void insertFront(int data){ 
     if(head == null){ 
      head = new LinkedListNode(data); 
     }else{ 
      LinkedListNode newNode = new LinkedListNode(data); 
      newNode.setNext(head); 
      head = newNode; 
     }  
    } 

    public void insertBack(int data){ 
     if(head == null){ 
      head = new LinkedListNode(data); 
     }else{ 
      LinkedListNode newNode = new LinkedListNode(data); 
      LinkedListNode current = head; 
      while(current.getNext() != null){ 
       current = current.getNext(); 
      } 
      current.setNext(newNode); 
     }  
    } 

    public int removeBack(){ 
     if(head == null){ 
      System.out.println("Error - Attempting to call removeBack() on empty list"); 
      return 0; 
     }else if (head.getNext() == null){ 
      int temp = head.getData(); 
      head = null; 
      return temp; 
     }else{ 

      LinkedListNode current = head; 
      while(current.getNext().getNext() != null){ 
       current = current.getNext(); 
      } 
      int temp = current.getNext().getData(); 
      current.setNext(null); 
      return temp; 
     }  
    } 

    public String toString(){ 
     String retStr = "Contents:\n"; 

     LinkedListNode current = head; 
     while(current != null){ 
      retStr += current.getData() + "\n"; 
      current = current.getNext(); 

     } 

     return retStr; 
    } 

    public LinkedListNode getHead() { 
     return head; 
    } 

    public void setHead(LinkedListNode head) { 
     this.head = head; 
    } 
} 
+2

आप अपने वर्ग का एक उदाहरण बना सकते हैं और फोन 'toString() 'उस पर। –

+1

'toString()' विधि को कॉल करें। मुझे उसमें कोई समस्या नहीं दिख रही है। – Prateek

+0

आपका मतलब क्या है। अगर मैं अपनी मुख्य विधि में "toString()" को कॉल करता हूं, तो मुझे एक त्रुटि मिलती है जो कहती है "गैर स्थैतिक विधि toString()? – Shawn

उत्तर

6
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){ 
       current = current.getNext(); 
       result += current.data + ", "; 
      } 
      return "List: " + result; 
} 
1

JVM की कोशिश करता आपके आवेदन को चलाने के लिए जब यह:

public class LinkedListNode 
{ 

    private int data; 
    private LinkedListNode next; 


    public LinkedListNode(int data) 
    { 
     this.data = data; 
     this.next = null; 
    } 

    public int getData() 
    { 
     return data; 
    } 

    public void setData(int d) 
    { 
     data = d; 
    } 

    public LinkedListNode getNext() 
    { 
     return next; 
    } 

    public void setNext(LinkedListNode n) 
    { 
     next = n; 
    } 
} 

यहाँ LinkedList वर्ग उस सूची में हेरफेर करने के मुख्य और तरीकों में शामिल है:

यहाँ नोड वर्ग है आपकी मुख्य विधि को स्थिर रूप से कॉल करता है; कुछ इस तरह:

LinkedList.main(); 

इसका मतलब है कि आपके LinkedList वर्ग का कोई उदाहरण नहीं है। अपनी toString() विधि को कॉल करने के लिए, आप अपने LinkedList कक्षा का एक नया उदाहरण बना सकते हैं।

तो अपने main विधि के शरीर इस तरह होना चाहिए:

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()); 
} 
3

के रूप में कुछ अन्य उत्तर और टिप्पणियों में बताया गया है, क्या तुम यहाँ याद कर रहे हैं JVM प्रणाली के लिए एक कॉल है कक्षा को आपके toString() विधि द्वारा उत्पन्न स्ट्रिंग को मुद्रित करने के लिए।

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

यह काम पूरा हो जाएगा, लेकिन मैं इसे इस तरह से करने की अनुशंसा नहीं करता। यदि हम ऑब्जेक्ट क्लास के लिए javadocs पर एक नज़र डालें, तो हमें यह विवरण ToString():

ऑब्जेक्ट का स्ट्रिंग प्रस्तुति देता है। सामान्य रूप से, ToString विधि एक स्ट्रिंग देता है जो इस ऑब्जेक्ट को "पाठ रूप से दर्शाती है"। परिणाम एक संक्षिप्त लेकिन सूचनात्मक प्रतिनिधित्व होना चाहिए जो किसी व्यक्ति को पढ़ने के लिए आसान है। यह अनुशंसा की जाती है कि सभी उप-वर्ग इस विधि को ओवरराइड करें।

जोर दिया गया है कि मेरा अपना है। आप एक स्ट्रिंग बना रहे हैं जिसमें लिंक की गई सूची की पूरी स्थिति शामिल है, जो आपकी कक्षा का उपयोग करने वाले किसी व्यक्ति की अपेक्षा नहीं कर रहा है। मैं निम्नलिखित परिवर्तनों की अनुशंसा करता हूं:

  1. अपनी लिंक्डलिस्ट नोड क्लास में एक toString() विधि जोड़ें।
  2. अधिक लिंक्ड होने के लिए अपनी लिंक्डलिस्ट कक्षा में toString() विधि अपडेट करें।
  3. अपनी लिंक्डलिस्ट क्लास में प्रिंटलिस्ट() नामक एक नई विधि जोड़ें जो आप वर्तमान में स्ट्रिंग() करने की अपेक्षा कर रहे हैं।

LinkedListNode में:

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

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

मैं इसे निम्नलिखित तरीके से कार्य करें:

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(); 
} 
संबंधित मुद्दे