我的 ArrayList 究竟有什么问题?

What exactly is wrong with my ArrayList?

我的程序可以编译,但是当我 运行 它时,它会给我一个 IndexOutOfBoundsException。我想知道它有什么问题,因为我看不到它。我的程序应该接受用户的输入并将其添加到 ArrayList。如果我的错误对你来说很明显,我很抱歉,但我在使用 ArrayLists 方面相对较新。谢谢!

ArrayList<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>();
int counter = 0;
int i = 0;
Scanner in = new Scanner(System.in);
int input = in.nextInt();

while(i < 5)
{
    input = in.nextInt();
    if(input != 0){
        arr.get(i).set(counter++, input);
    }
    else{
        arr.get(i).set(counter++, input);
        i++;
        counter = 0;
    }
}

System.out.println(arr);

当您创建 ArrayListArrayList 时,最初 arr 中不包含 ArrayList。因此,任何对 get 的调用都将失败并显示 IndexOutOfBoundsException.

首先,将初始内ArrayList添加到arr

然后,在 while 循环中,get 当前内部 ArrayList 就像你正在做的那样,但只需调用 add 以在末尾附加一个数字的名单。否则,您的内在 ArrayList 会得到一个 IndexOutOfBoundsException。同样,您创建的 ArrayList 最初是空的。

当用户输入 0 时,然后 add 另一个 ArrayList 当您递增 i 时(除非 i 已经在最后一个期望值值), 为用户将数字添加到下一个列表做准备。

您正在创建列表的列表,两者都是空的。您还使用 "set" 方法,该方法实际上用于替换特定位置列表中的对象。

所以看起来你想从用户那里获取输入,如果值为 0,你只是想忽略它。以下是您的更新示例。

    ArrayList<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>();
    int i = 0;
    Scanner in = new Scanner(System.in);
    int input = 0;
    while(i < 5){
        input = in.nextInt();
        if(input != 0){
            arr.add(new ArrayList<Integer>());
            arr.get(i).add(input);
            i++;
        }

    }

    System.out.println(arr);

如果您只想创建一个整数列表,则无需创建列表列表。您可以通过创建一个仅包含整数的列表来实现。

 ArrayList<Integer>  arr = new ArrayList< Integer >();
    int i = 0;
    Scanner in = new Scanner(System.in);
    int input = 0;
    while(i < 5){
        input = in.nextInt();
        if(input != 0){
            arr.add(input);
            i++;
        }

    }

    System.out.println(arr);