我的 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);
当您创建 ArrayList
个 ArrayList
时,最初 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);
我的程序可以编译,但是当我 运行 它时,它会给我一个 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);
当您创建 ArrayList
个 ArrayList
时,最初 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);