为什么 Java.Util.Stack 不弹出循环中的最后一个元素?
Why does the Java.Util.Stack not pop last element in the loop?
我有一个非常基本的问题
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()
是否随着堆栈大小的变化而变化?
Is the condition i < s.size()
changing as the stack size changes ?
是的,因为 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();
...
}
是的,正如您所说,循环根据堆栈大小检查 i 的值。由于堆栈大小在变化,它不会做你想做的事。只需将初始堆栈大小放入变量:
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(" ->");
}
我有一个非常基本的问题
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()
是否随着堆栈大小的变化而变化?
Is the condition
i < s.size()
changing as the stack size changes ?
是的,因为 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();
...
}
是的,正如您所说,循环根据堆栈大小检查 i 的值。由于堆栈大小在变化,它不会做你想做的事。只需将初始堆栈大小放入变量:
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(" ->");
}