首页 > 解决方案 > Helsinki MOOC.fi 一直告诉我“IndexOutOfBoundsException:索引:0,大小:0”,但我总是得到想要的输出..?

问题描述

这是我的程序...

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    ArrayList<Integer> list = new ArrayList<>();

    while (true) {
        int number = Integer.valueOf(scanner.nextLine());
        if (number <= -1) {
            break;
        }
        list.add(number);
    }
    int biggest = list.get(0);              

    for (int i = 0; i <= list.size()-1; i++) {        
        int small = list.get(i);            
        if (small > biggest) {               
            biggest = small;
        }

    }
    System.out.println("The greatest number: " + biggest);

}

它完成了项目要求我做的事情。我只需要遍历 ArrayList 并打印出列表中的最大值。有用!但是,当我提交项目时,我只是得到一个“索引越界异常”。为什么会这样?

标签: javafor-looparraylist

解决方案


int number = Integer.parseInt(scanner.nextLine());

用于.parseInt()从 String 中获取 int 值。不是.valueOf()在使用原语时。

文档

.valueOf()方法返回一个等于以下值的 Integer 对象:

new Integer(Integer.parseInt(s))

如果输入的第一个数字是-1,那么list.get(0);将抛出相同的异常。您需要进行如下检查:

if (list.size() > 0) {
    int biggest = list.get(0);

    for (int i = 0; i <= list.size()-1; i++) {
        int small = list.get(i);
        if (small > biggest) {
            biggest = small;
        }

    }
    System.out.println("The greatest number: " + biggest);
} else {
    // handle case - first number entered was -1
}

推荐阅读