2010-05-30 77 views
1

這是我對主類和雙向鏈接類和節點類的代碼,但是當我運行該程序時,在concole中將顯示此「[email protected]」而不是隨機數。請幫助我謝謝!將元素添加到雙向鏈表中

主類:

public class Main { 

    public static int getRandomNumber(double min, double max) { 
     Random random = new Random(); 
     return (int) (random.nextDouble() * (max - min) + min); 

    } 

    public static void main(String[] args) { 
     int j; 
     int i = 0; 
     i = getRandomNumber(10, 10000); 
     DoublyLinkedList listOne = new DoublyLinkedList(); 

     for (j = 0; j <= i/2; j++) { 
      listOne.add(getRandomNumber(10, 10000)); 


     } 
     System.out.println(listOne); 

    } 
} 

雙向鏈表類:

public class DoublyLinkedList { 

private Node head ; 
private Node tail; 
private long size = 0; 

public DoublyLinkedList() { 
    head= new Node(0, null, null); 
    tail = new Node(0, head, null); 
} 



public void add(int i){ 

head.setValue(i); 
Node newNode = new Node(); 
head.setNext(newNode); 
newNode.setPrev(head); 
newNode = head; 

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

和節點類是像你以前(節點分組,節點接下來,int值)看到的類

編輯:我添加了toString方法,但會顯示行「result.append(temp.getValue()+」 - 「」;「)的空指針異常」請幫助我,謝謝

回答

2

當你在一個對象上調用System.out.println它(友好地)調用該對象的toString方法。如果您尚未爲某個對象定義toString,則將獲得由其中一個祖先定義的對象。在你的情況下,你不擴展任何東西,所以你會得到toString Object - 可能不是你想要的。

嘗試在你的類中定義一個toString()方法。在其中,您應該循環遍歷節點並構建一個包含所需表示的String

+0

嗨我已經習慣了字符串方法 但現在它會顯示一個異常空指針異常 – user329820 2010-05-30 08:51:44

+0

當你嘗試用空對象做某事時會觸發該異常。我最好的猜測是add方法不正確,'temp'在某個點變成'null',而不是變成'tail' – nc3b 2010-05-30 09:22:59

1

當您打印對象時,它會執行它的.toString()方法。 你看到的是默認的toString實現。

你可以重寫的ToString定製得到集團的印刷版的東西 - 你的情況,你可能會遍歷所有的項目,並創建一個逗號分隔的數字列表或某事

0

運行System.out.println(Object);需要Object轉換成一個字符串。它通過執行toString方法執行此操作。如果對象未實現toString,則使用默認實現,該實現將返回類名稱及其哈希碼。

您將需要重寫該對象並提供合適的toString或循環遍歷元素並在自己調用println之前構建您的字符串。