【问题标题】:java.lang.ArrayIndexOutOfBoundsException: 0 - Array larger than Index?java.lang.ArrayIndexOutOfBoundsException: 0 - 数组大于索引?
【发布时间】:2011-12-13 18:20:39
【问题描述】:

抛出的异常是否表示数组大于索引?如果不是,那是什么意思,为什么?如何更正?


线程“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

标签: java arrays exception


【解决方案1】:

表示它小于索引。换句话说,没有命令行参数,你假设至少有一个。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      这是一个检查。

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

      【讨论】:

        【解决方案4】:

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

        添加这个

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-17
            • 2021-05-29
            • 1970-01-01
            • 2019-03-30
            • 2020-11-14
            • 1970-01-01
            相关资源
            最近更新 更多