今天温故LCS的时候,在出栈的时候出现了一些问题.
简化代码如下:
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("The size of stack is " + stack.size());
for(int i=0;i<stack.size();i++){
System.out.println(stack.pop());
}
}
}
执行结果如下:
The size of stack is 5
5
4
3
栈的大小都打印出来是5,也就是for(int i=0;i<5;i++),按理说应该出栈5次,但是只出栈了3次,这是为什么呢?
首先进行错误定位,既然出栈次数不是我们料想的次数,那么一般就是循环结束条件stack.size()的问题.
我们来debug一番,先将程序运行到for循环的那一步,然后对stack.size()进行观察。
然后F6逐步进行for循环,那么我们就会很清晰的发现,stack.size()的值在每次循环的时候都会发生变化,也就是每次循环的时候都会重新计算stack.size()的值,因为我们在循环体里面进行了一次pop操作,所以每次计算出的stack.size()为弹出之后的stack.size。
程序运行也就是
i = 0;i < 5; i++
i = 1;i < 4; i++
i = 2;i < 3; i++
i = 3;i < 2 ; break;
运行3次,这下一目了然,在此记录,以防再犯。