为什么Java.Util.Stack没有弹出循环中的最后一个元素?

Nav*_*ran 2 java collections 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(" ->");
 }
Run Code Online (Sandbox Code Playgroud)

这导致输出

3-> 2->

并不是

3-> 2-> 1

循环不应该运行三次,条件是否i < s.size()随堆栈大小的变化而变化?

Rad*_*def 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
Run Code Online (Sandbox Code Playgroud)

我们通常会写这样的循环:

while (!s.isEmpty()) {
    Integer e = s.pop();
    ...
}
Run Code Online (Sandbox Code Playgroud)