Java 我的ArrayList到底出了什么问题?

Java 我的ArrayList到底出了什么问题?,java,arraylist,indexoutofboundsexception,Java,Arraylist,Indexoutofboundsexception,我的程序可以编译,但当我运行它时,它会给我一个索引outofboundsexception。我想知道它怎么了,因为我看不见它。我的程序应该接受用户的输入并将其添加到ArrayList中。如果我的错误对您来说很明显,我很抱歉,但我在使用ArrayList方面相对较新。谢谢 ArrayList<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>(); int counter = 0;

我的程序可以编译,但当我运行它时,它会给我一个
索引outofboundsexception
。我想知道它怎么了,因为我看不见它。我的程序应该接受用户的输入并将其添加到ArrayList中。如果我的错误对您来说很明显,我很抱歉,但我在使用ArrayList方面相对较新。谢谢

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);
ArrayList arr=new ArrayList();
int计数器=0;
int i=0;
扫描仪输入=新扫描仪(系统输入);
int input=in.nextInt();
而(i<5)
{
input=in.nextInt();
如果(输入!=0){
arr.get(i).set(计数器++,输入);
}
否则{
arr.get(i).set(计数器++,输入);
i++;
计数器=0;
}
}
系统输出打印项次(arr);

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

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

然后,在
while
循环中,
get
获取当前的内部
ArrayList
,但只需调用
add
在列表末尾追加一个数字即可。否则,您将在内部
ArrayList
上获得
IndexOutOfBoundsException
。同样,您创建的
ArrayList
最初是空的


当用户输入
0
时,然后在递增
i
时添加另一个
ArrayList
(除非
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 arr=new ArrayList();
int i=0;
扫描仪输入=新扫描仪(系统输入);
int输入=0;
而(i<5){
input=in.nextInt();
如果(输入!=0){
arr.add(新的ArrayList());
arr.get(i).添加(输入);
i++;
}
}
系统输出打印项次(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);
ArrayList arr=new ArrayList();
int i=0;
扫描仪输入=新扫描仪(系统输入);
int输入=0;
而(i<5){
input=in.nextInt();
如果(输入!=0){
arr.add(输入);
i++;
}
}
系统输出打印项次(arr);

您从未向
arr
添加任何内容。当对空的
列表调用
arr.get(i)
时,您希望执行什么操作?为什么需要嵌套的arraylist?您是否正在尝试创建一个没有负数的arraylist?因此,如果我最初创建arraylist
arraylist arr=new arraylist(5)这样行吗?因为我仍然得到一个IndexOutOfBoundsError。不,这只是将外部
ArrayList
的初始容量设置为5。如果只对代码进行更改,那么外部
ArrayList
中仍然没有任何内容。如果你愿意,你可以做出改变,但你仍然需要在我的答案中做出改变。