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
相关产品推荐
相关产品推荐

