我的ArrayList究竟出了什么问题?

时间:2015-04-02 21:54:07

标签: java arraylist indexoutofboundsexception

我的程序编译,但是当我运行它时,它会给我一个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);

2 个答案:

答案 0 :(得分:3)

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

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

然后,在while循环中,get当前内部ArrayList正在进行,但只需调用add将数字追加到结尾名单。否则,您的内部IndexOutOfBoundsException会获得ArrayList。同样,您创建的ArrayList最初是空的。

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

答案 1 :(得分:0)

您正在创建列表列表,两者都是空的。你也在使用&#34; set&#34;实际上用于替换特定位置列表中对象的方法。

所以看起来你想从用户那里获取输入,如果值为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);