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