Java集合框架中Stack无法添加多个元素的问题排查
Java Stack无法累积元素的问题修复
问题根源
你的代码里**Stack<Integer> numberss = new Stack<Integer>();被放在了while循环内部**,每次循环都会创建一个全新的空栈,之前push的元素自然会丢失,所以每次只能看到刚添加的元素。
另外还有两个小问题:
- 重复创建Scanner对象,没必要,一个Scanner就够
- pop操作的判断条件错误:
numberss.size() >= 0永远为真,空栈调用pop会抛出EmptyStackException,应该判断numberss.size() > 0或者!numberss.isEmpty()
修正后的代码
import java.util.*; public class stackexp1 { public static void main(String[] args) { // 将Stack声明在while循环外面,保证整个程序生命周期内只用同一个栈 Stack<Integer> numberss = new Stack<Integer>(); // 只创建一个Scanner对象,重复使用 Scanner scanner = new Scanner(System.in); while (true) { System.out.println("\n.........栈操作菜单..........."); System.out.println("1 >> 入栈(Push)"); System.out.println("2 >> 出栈(Pop)"); System.out.println("3 >> 显示栈元素\n"); System.out.print("请输入操作选择 >> "); int choice = scanner.nextInt(); switch (choice) { case 1: System.out.println("你选择了入栈操作......:)"); System.out.print("\n请输入要入栈的数字 >> "); int num = scanner.nextInt(); numberss.push(num); System.out.println("当前栈元素:" + numberss); break; case 2: if (!numberss.isEmpty()) { System.out.println("你选择了出栈操作......:)"); System.out.println("出栈的元素是 >> " + numberss.pop()); } else { System.out.println("\n栈是空的"); } break; case 3: if (!numberss.isEmpty()) { System.out.println("你选择了显示栈元素操作.....:)"); System.out.println("栈内的元素是 >> " + numberss); } else { System.out.println("栈是空的....:)"); } break; default: System.out.println("没有该选项,请重新选择....:)"); } } } }
关键修改说明
- 将Stack移到while循环外部:确保整个程序运行期间使用同一个栈实例,元素可以持续累积
- 只创建一个Scanner:避免重复创建IO资源,提升效率
- 修正空栈判断逻辑:使用
isEmpty()方法更直观,避免空栈pop时抛出异常 - 优化了菜单的中文表述,更易读
内容的提问来源于stack exchange,提问作者Shubham-Misal
相关产品推荐
相关产品推荐

