2015-12-08 47 views
0

我看到一個關於鏈接列表發佈的問題,並試圖解決它時遇到問題,現在我無法弄清楚。這裏有兩個類:列表中的節點

  if (part1.equals("add")) 
      { 
       test.addNext(num); 
       while(!test.isEmpty()){ 
       System.out.println(test.pop() + " "); 

       } 

      } 

這裏,將設置節點添加到鏈表

import java.util.List; 
import javax.xml.soap.Node; 


    int count; 

    Set() { 
     front = null; 
     count = 0; 
    } 

    boolean isEmpty() { 
     return front==null; 
    } 



    int pop() { 
     int x = front.x; 
     front = front.next; 
     count--; 
     return x; 
    } 

} 

我似乎無法弄清楚,爲什麼我不能得到一個列表類當用戶輸入各種整數時打印。如果我硬編碼沒有得到用戶的輸入,像這樣:

test.addNext(1); 
test.addNext(7); 
test.addNext(3); 

while(!test.isEmpty()){ 
System.out.println(test.pop() + " "); 
} 

我得到這樣的輸出:

3 7 1 

爲什麼我不能得到相同的結果時,我允許用戶輸入整數?作爲該計劃目前爲,這裏是輸出的樣子:

Enter command: add 1 
1 
Enter command: add 7 
7 
Enter command: add 3 
3 
Enter command: 

當我想輸出看起來像這樣:

Enter command: add 1 
1 
Enter command: add 7 
7 1 
Enter command: add 3 
3 7 1 
Enter command: 

回答

4

您的代碼打印列表修改它:

while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

This 從列表中刪除項直到它爲空。這意味着每次打印時(每添加一個新項目後),都會立即再次刪除該項目。獲得用戶輸入的情況與硬編碼值之間的區別在於,您在每個新用戶輸入之後都會打印,而您只能在硬編碼數據的末尾打印。

所以,你會看到同樣的問題,如果你沒有這樣的代碼:

test.addNext(1); 
while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

test.addNext(7); 
while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

test.addNext(3); 
while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

而且你會看到問題消失,如果你問用戶打印列表之前的所有三個項目。

使用您當前的代碼,無法刪除列表中的所有節點(不考慮在打印後再次重新添加它們),無法檢查它們。我建議編寫一個toString方法,它將打印每個節點,並且不會刪除任何內容。事情是這樣的:

@Override 
public String toString(){ 
    StringBuilder sb = new StringBuilder(); 
    LinkedNode current = front; 
    while(current != null){ 
     sb.append(current.x + " "); //Not an ideal solution, but demonstrates the right idea. 
     current = current.next; 
    } 
    return sb.toString(); 
} 

或者,你可以實現get(int)size()方法(或迭代器),和做一個循環這樣的,而不是當前的while循環:

for(int i = 0; i < test.size(); i++){ 
    System.out.println(test.get(i) + " "); 
} 
+0

你會介意解釋原因當我硬編碼整數沒有得到用戶輸入時,它顯示所有添加的數字?我無法理解編碼值的區別,而不是從用戶那裏獲取它們。 – sam1319

+1

@ mike1319我已將該部分添加到答案中。基本上,不同的是當你做印刷。在第一種情況下,您將所有三個值讀入列表中,然後將其打印出來。在用戶輸入案例中,您將在添加*每個新項目後打印列表。 – resueman

+1

這現在非常有意義。感謝您花時間向我詳細解釋這一點。 – sam1319