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

