You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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("没有该选项,请重新选择....:)");
            }
        }
    }
}

关键修改说明

  1. 将Stack移到while循环外部:确保整个程序运行期间使用同一个栈实例,元素可以持续累积
  2. 只创建一个Scanner:避免重复创建IO资源,提升效率
  3. 修正空栈判断逻辑:使用isEmpty()方法更直观,避免空栈pop时抛出异常
  4. 优化了菜单的中文表述,更易读

内容的提问来源于stack exchange,提问作者Shubham-Misal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 21:43:16