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

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


线程“main”中的exceptionjava.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); } } 

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

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

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

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

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

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

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

加上这个

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

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

这是对此的检查。

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