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

8

这个抛出的异常是否表示数组比索引大?如果不是,那么它表示什么,为什么会出现?我该如何纠正它?


在主线程中发生异常:"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);
}
}

System.out.println(args.length); // and order is restored - user166390
5个回答

17

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

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


5

这意味着数组比索引小。在这种情况下,这意味着数组为空。

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

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

4

这意味着它比索引值要小。换句话说,没有命令行参数,而你却假定至少有一个。


1

您正在访问不存在的数组索引。这将发生在任何小于0或大于等于数组长度的索引。

添加此内容

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

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接