java.lang.ArrayIndexOutOfBoundsException:0 - 大于索引的数组?

时间:2011-10-23 22:47:47

标签: java arrays exception

抛出的异常是否表明数组大于索引?如果没有,这是什么意思,为什么?我该如何纠正?


线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0     在leapyear.LeapYear.main(LeapYear.java:13)


public class LeapYear {

public static void main(String[] args) { 
    int year = Integer.parseInt(args[0]);
    boolean isLeapYear;

    // divisible by 4
    isLeapYear = (year % 4 == 0);

    // divisible by 4 and not 100
    isLeapYear = isLeapYear && (year % 100 != 0);

    // divisible by 4 and not 100 unless divisible by 400
    isLeapYear = isLeapYear || (year % 400 == 0);

    System.out.println(isLeapYear);
}
}

5 个答案:

答案 0 :(得分:17)

数组不包含任何元素 - 它是一个空数组。因此,当您要求数组中的第一个元素(索引0中包含的元素)时,数组会显示“我在索引0处没有元素”。它通过抛出异常来说“这个”。在您的情况下,异常是 java.lang.ArrayIndexOutOfBoundsException:0

这意味着您请求的索引超出了数组的范围。换句话说,数组有一个长度(它的边界)。当它的长度为0(它是空的)并且你要求第一个元素时,数组会告诉你你请求的项目是不可用的,因为数组甚至不是1个元素长。

答案 1 :(得分:5)

这意味着数组小于索引。在这种情况下,它意味着数组是空的。

您应该传递一个命令行参数,以便在那里有一个值。如果需要,你最好添加一些验证,比如

if (args.length == 0) {
    throw new IllegalArgumentException("year is required");
}

答案 2 :(得分:4)

这意味着它小于索引。换句话说,没有命令行参数,并且假设至少有一个。

答案 3 :(得分:1)

您正在访问不存在的数组的索引。对于任何小于0或更大或等于数组长度的索引,都会发生这种情况。

添加此

if(args != null || args.length < 1) {
  throw new IllegalArgumentException("Please provide an argument.");
}

答案 4 :(得分:0)

抛出以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。

这是对此的检查。

public static void main(String[] args) { 
if (args.length != 1){
    System.out.println("Year Required")
    System.exit(0);
}
    int year = Integer.parseInt(args[0]);
    boolean isLeapYear;

    // divisible by 4
    isLeapYear = (year % 4 == 0);

    // divisible by 4 and not 100
    isLeapYear = isLeapYear && (year % 100 != 0);

    // divisible by 4 and not 100 unless divisible by 400
    isLeapYear = isLeapYear || (year % 400 == 0);

    System.out.println(isLeapYear);
}