for(int i=0;i<stack.size();i++)出栈不完全问题

今天温故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次,这下一目了然,在此记录,以防再犯。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值