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?因此,如果我最初创建arraylistarraylist arr=new arraylist(5)代码>这样行吗?因为我仍然得到一个IndexOutOfBoundsError。不,这只是将外部ArrayList
的初始容量设置为5。如果只对代码进行更改,那么外部ArrayList
中仍然没有任何内容。如果你愿意,你可以做出改变,但你仍然需要在我的答案中做出改变。