Java 处理用户输入时ArrayList IndexOutOfBoundsException

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

我正在尝试编写一个程序,它使用一个sentinal contolled do while循环,反复向用户请求正整数

当用户输入负值时,循环应结束。循环完成后,您的程序应打印出所需正数的最小值、最大值、平均值和计数 是由用户输入的

但是,当我运行该程序时,会出现以下错误:

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()

…或者类似的东西

“大多数人只是建议删除“=”…试试看。当你遵循建议时发生了什么?”大多数人只是建议删除“=”…试试看。当你遵循建议时发生了什么?