gpt4 book ai didi

java - 数组列表的数组列表中越界

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:58 25 4
gpt4 key购买 nike

每当我尝试将元素添加到第一个内部数组时,它都会给出越界异常。我正在尝试创建一个 2d 数组列表来将名称存储在第一个槽中,然后存储 30 个等级。我不知道如何向内部数组列表添加任何内容。抛出错误 ((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);
}
}
}
}

最佳答案

查看 ArrayList.set 的文档方法。您将看到它替换给定位置的元素。因为您的列表是空的,所以此时会抛出错误。

您可以使用add此时将名称添加到列表中。

您的代码中存在严重缺陷,您最好解决这些缺陷。您打算将字符串(名称)和整数(成绩)存储在单个列表中。这几乎总是在单个集合中存储多个数据域的设计缺陷的迹象。

解决这个问题的两个选项是:

  • 使用Map<String,List<Integer>> grades来存储你的成绩。然后使用grades.put(name, new ArrayList<>())grades.get(name).add(grade) .

  • 更好的方法是定义 StudentGrade存储名称和成绩列表的类。然后你可以有一个 List<StudentGrade>Map<String,StudentGrade>>存储学生成绩列表。这将使您的代码更加清晰。

关于java - 数组列表的数组列表中越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37647613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com