2015-06-11 81 views
2

我有一個非常基本的問題爲什麼Java.Util.Stack不會彈出循環中的最後一個元素?

Stack<Integer> s=new Stack<integer>(); 
s.push(New Integer(1)); 
s.push(New Integer(2)); 
s.push(New Integer(3)); 
for(int i=0;i<s.size();i++){ 
       System.out.println("i: "+i+" size:"+s.size()); 
       System.out.print(s.pop()); 
       if(s.size()>=1) 
        System.out.print(" ->"); 
} 

這導致

3-> 2->

的輸出與不

3-> 2> 1

不應循環運行三次,是否條件i < s.size()隨堆棧大小更改而變化?

+0

如果'大小()'是爲了返回堆棧的大小:是不是必然要改變「爲堆棧大小的變化」?閱讀你的問題,自己回答! – laune

回答

6

條件i < s.size()是否隨堆棧大小變化而變化?

是的,因爲i增加而size()同時減少。瀏覽頭部或紙上的邏輯。

for (i = 0, size = 3) 
    pop() ... i++ 

for (i = 1, size = 2) 
    pop() ... i++ 

for (i = 2, size = 1) 
    loop ends 

我們通常會寫這樣的循環是這樣的:

while (!s.isEmpty()) { 
    Integer e = s.pop(); 
    ... 
} 
+0

您可以添加一些內容來顯示如何在不引用size()的情況下打印' - >'。 – laune

1

是的,就像你說的,循環檢查我的對堆棧大小的值。由於堆棧大小正在改變,它不會做你想做的事情。只要把初始堆棧大小到一個變量:

Stack<Integer> s=new Stack<integer>(); 
s.push(New Integer(1)); 
s.push(New Integer(2)); 
s.push(New Integer(3)); 
int size = s.size() 
for(int i=0;i<size;i++){ 
       System.out.println("i: "+i+" size:"+s.size()); 
       System.out.print(s.pop()); 
       if(s.size()>=1) 
        System.out.print(" ->"); 
} 
相關問題