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

Java使用while循环接收用户输入到0为止时报堆内存溢出问题排查

问题诊断与修复方案

根因分析

代码核心错误为while循环逻辑缺失输入更新步骤:你仅在进入循环前读取了一次用户输入的整数a,若首次输入的数值不为0,while循环的判断条件a!=0会永久成立,程序会无限向ArrayList中重复添加同一个a的数值,导致列表内存占用持续增长,最终触发Java堆内存溢出错误。

修复代码

import java.util.ArrayList;
import java.util.Scanner;

public class InputStorage {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Integer> myList = new ArrayList<Integer>();
        int a = scanner.nextInt();
        
        while(a!= 0) {
            myList.add(a);
            // 新增:循环内读取下一次用户输入,更新判断条件所用的变量a
            a = scanner.nextInt();
        }
        // 输出所有存储的数字
        for(int i = 0; i < myList.size(); i++) {
            System.out.println(myList.get(i));
        }
        scanner.close();
    }
}

补充说明

  • 修复逻辑:在while循环体末尾新增用户输入读取逻辑,每次循环都会更新变量a的取值,当用户输入0时即可正常退出循环,不会出现无限写入列表的问题。
  • 可选优化:如果业务场景存在输入数量上限,可以在添加元素前判断列表长度是否超过阈值,避免异常大输入量引发内存溢出。

内容的提问来源于stack exchange,提问作者newJava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:39:03