繁体   English   中英

在arraylists的arraylist中出界

[英]Out of bounds in an arraylist of arraylists

每当我尝试向第一个内部数组添加一个元素时,它就会产生一个超出范围的异常。 我正在尝试创建一个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);
            }
        }
    }
}

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM