每当我尝试向第一个内部数组添加一个元素时,它就会产生一个超出范围的异常。我正在尝试创建一个2d arraylist来存储第一个插槽中的名称,然后是30个等级。我无法弄清楚如何向内部arraylist添加任何东西。抛出错误((ArrayList)matrix.get(i))。set(0,nameIn);在那条线上。
import java.util.*;
/**
*
* @author mitchell castaldini
* @version 5/5/2016
*/
public class gradebookTester
{
public static void main(String args[])
{
Scanner in = new Scanner(System.in);
/*List<List<String>> lists = new ArrayList<List<String>>();
for(int i = 0; i < numNames;i++)
{
lists.add(new ArrayList<String>());
}*/
ArrayList matrix = new ArrayList();
//matrix.add(row1);
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
matrix.add(new ArrayList());
makeArrays(matrix);
}
private static void makeArrays(ArrayList matrix)
{
ArrayList row1 = new ArrayList();
matrix.add(row1);
Scanner in = new Scanner(System.in);
int a = 2;
for(int i = 0; i < a; i++)
{
System.out.println("Add name");
String nameIn = in.next();
row1.set(0, nameIn);
//((ArrayList)matrix.get(i)).set(0, nameIn);
for(int d = 0; d < 10;d++)
{
System.out.println("Add the " + (d+1) + " grade");
int gradeIn = in.nextInt();
((ArrayList)matrix.get(i)).set(d, gradeIn);
}
}
}
}
答案 0 :(得分:0)
查看ArrayList.set
方法的文档。您将看到替换给定位置的元素。因为您的列表是空的,所以此时会抛出错误。
此时您可以使用add
将名称添加到列表中。
您的代码中存在严重缺陷,您应该明智地解决这些问题。您打算将字符串(名称)和整数(成绩)存储在单个列表中。这几乎总是表明在一个集合中存储多个数据域的设计缺陷。
解决这个问题的两个方法是:
使用Map<String,List<Integer>> grades
来存储您的成绩。然后使用grades.put(name, new ArrayList<>())
和grades.get(name).add(grade)
。
最好定义一个存储名称和成绩列表的StudentGrade
类。然后,您可以使用List<StudentGrade>
或Map<String,StudentGrade>>
来存储学生成绩列表。这将使您的代码更清晰。