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

本文探讨了一个关于 Java 中 Stack 类使用时遇到的典型问题:在循环中使用 pop 方法导致实际出栈次数少于预期的原因。通过调试过程揭示了 stack.size() 在循环中的动态变化,并给出了详细的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值