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

使用ArrayList接收输入触发内存溢出,请求代码排查

内存溢出问题排查与修复:ArrayList接收输入逻辑错误

问题根源

你的代码中takeInput方法存在致命逻辑错误:while循环内未重新读取新输入,导致第一次输入的非-1值被无限重复添加到ArrayList,最终触发内存溢出。

具体来说,你只在循环外执行了一次int i=s.nextInt();,进入循环后没有更新i的值,循环条件i!=-1永远成立,list.add(i)会无限制执行,ArrayList不断扩容直到耗尽内存。

修正后的代码

import java.util.*;
public class ArrayListTakeInput {
    public static ArrayList<Integer> takeInput(){
        ArrayList<Integer> list = new ArrayList<Integer>();
        Scanner s = new Scanner(System.in);
        int i = s.nextInt();
        while(i != -1){
            list.add(i);
            // 关键修复:每次循环后读取新的输入,更新i的值
            i = s.nextInt();
        }
        s.close(); // 建议关闭Scanner释放资源
        return list;
    }

    public static void print(ArrayList<Integer> list2){
        for(int i=0; i<list2.size(); i++) {
            System.out.print(list2.get(i) + " ");
        }
    }

    public static void main(String[] args) {
        ArrayList<Integer> list2 = takeInput();
        print(list2);
    }
}

关键修改点

  • 在while循环内部添加i = s.nextInt();,每次循环后读取新的输入值,确保循环条件能正确判断是否终止。
  • 新增s.close();,使用完Scanner后关闭资源,避免资源泄漏。

内容的提问来源于stack exchange,提问作者047_saksham bajaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:10:49