使用Scanner向列表添加元素时抛出IndexOutOfBoundsException异常
问题分析与修复
错误原因
这段代码抛出IndexOutOfBoundsException的核心问题是:外层的ArrayList<ArrayList<Integer>> list初始化后是空集合,当第一次执行list.get(i)(此时i=0)时,集合里还没有任何子ArrayList,自然找不到索引0对应的元素,直接触发索引越界异常。
修复代码
只需要在读取每个子列表的长度后,先创建一个新的子ArrayList并添加到外层集合中,再往这个子列表里添加元素:
import java.util.ArrayList; import java.util.Scanner; public class Main { private static Scanner scanner = new Scanner(System.in); public static int getNoOfTC() { System.out.println("Enter number of ArrayLists to create:"); return scanner.nextInt(); } public static void main(String[] args) { int tcCount = getNoOfTC(); ArrayList<ArrayList<Integer>> list = new ArrayList<>(); for (int i = 0; i < tcCount; i++) { System.out.println("Enter the size of the array"); int len = scanner.nextInt(); // 先创建新的子ArrayList并添加到外层集合 ArrayList<Integer> subList = new ArrayList<>(); list.add(subList); // 再往子列表里添加元素 for (int j = 0; j < len; j++) { int temp = scanner.nextInt(); subList.add(temp); } } // 可选:验证结果 System.out.println("Created ArrayLists:"); for (ArrayList<Integer> sub : list) { System.out.println(sub); } } }
修复说明
- 每次循环处理一个子列表时,先实例化
ArrayList<Integer> subList,并通过list.add(subList)把它加入外层集合,确保后续能获取到有效的子列表对象。 - 后续添加元素直接操作
subList变量,比list.get(i)更直观,也避免了重复调用get方法的开销。
内容的提问来源于stack exchange,提问作者Ajay Mishra
相关产品推荐
相关产品推荐

