Java 处理用户输入时ArrayList IndexOutOfBoundsException
我正在尝试编写一个程序,它使用一个sentinal contolled do while循环,反复向用户请求正整数 当用户输入负值时,循环应结束。循环完成后,您的程序应打印出所需正数的最小值、最大值、平均值和计数 是由用户输入的 但是,当我运行该程序时,会出现以下错误:Java 处理用户输入时ArrayList IndexOutOfBoundsException,java,arraylist,Java,Arraylist,我正在尝试编写一个程序,它使用一个sentinal contolled do while循环,反复向用户请求正整数 当用户输入负值时,循环应结束。循环完成后,您的程序应打印出所需正数的最小值、最大值、平均值和计数 是由用户输入的 但是,当我运行该程序时,会出现以下错误: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.range
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at posNeg.main(posNeg.java:31)
我一直在寻找答案,但似乎没有一个有效。大多数人只是建议从(inti=0;i=0)的
中删除=
;
Iterator it=list.Iterator();
list.remove(list.get(count-1));
对象最大值=Collections.max(列表);
Object min=Collections.min(列表);
系统输出打印(列表);
int-tot=0;
对于(inti=0;i当您构建列表时,您将增加计数
因此,在构建count==list.size()
之后
之后,从列表中删除一项,但不更改计数
所以count==list.size()-1
所以你的循环应该是
for (int i = 0; i <= count-2; i++) {
当你建立你的列表时,你会增加计数
因此,在构建count==list.size()
之后
之后,从列表中删除一项,但不更改计数
所以count==list.size()-1
所以你的循环应该是
for (int i = 0; i <= count-2; i++) {
看看这个循环:
for (int i = 0; i <= (count); i++) {
或者,更简单地说:
for (Number number : list) {
...
}
这仅在制作列表后有效,尽管:
List<Number> list = new ArrayList<Number>();
List List=new ArrayList();
你真的应该在集合中使用泛型。看看这个循环:
for (int i = 0; i <= (count); i++) {
或者,更简单地说:
for (Number number : list) {
...
}
这仅在制作列表后有效,尽管:
List<Number> list = new ArrayList<Number>();
List List=new ArrayList();
你真的应该在集合中使用泛型。最好这样做
for (int i = 0; i < (count); i++) {
}
最好这样做
for (int i = 0; i < (count); i++) {
}
正如其他人所指出的,这个bug与count有关。我建议在输入循环中使用一个有条件的中断;
,以避免将负值添加到列表中,并增加count。首先,您仍然需要将这个bug与count一起替换,正如其他人所指出的。我建议在输入循环中使用有条件的中断;
您的输入循环可以避免将负值添加到列表中,并增加计数。首先,您仍然需要替换尝试此列表。大小而不是计数
for (int i = 0; i < list.size(); i++) {
Object piece = list.get(i);
int piecenum = ((Number) piece).intValue();
tot = tot + piecenum;
}
for(int i=0;i
尝试此列表。大小
而不是计数
for (int i = 0; i < list.size(); i++) {
Object piece = list.get(i);
int piecenum = ((Number) piece).intValue();
tot = tot + piecenum;
}
for(int i=0;i
一些建议
do{
System.out.println("enter pos nums (or a neg num to quit): ");
num = sc.nextInt();
if (num >= 0)
break;
list.add(num);
}while (true);
…对于下一个循环
int tot = 0;
for (int i : list ) {
//do your stuff
}
…但你真的应该使用一个键入的列表
List<int> list = new ArrayList<int>()
List List=new ArrayList()
…或诸如此类的建议
do{
System.out.println("enter pos nums (or a neg num to quit): ");
num = sc.nextInt();
if (num >= 0)
break;
list.add(num);
}while (true);
…对于下一个循环
int tot = 0;
for (int i : list ) {
//do your stuff
}
…但你真的应该使用一个键入的列表
List<int> list = new ArrayList<int>()
List List=new ArrayList()
…或者类似的东西“大多数人只是建议删除“=”…试试看。当你遵循建议时发生了什么?”大多数人只是建议删除“=”…试试看。当你遵循建议时发生了什么?