java.lang.ArrayIndexOutOfBoundsException: 0 - массив больше индекса? - PullRequest
8 голосов
/ 24 октября 2011

Указывает ли выброшенное исключение, что массив больше индекса? Если нет, что это значит и почему? Как мне это исправить?


Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 0 at 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 ]

17 голосов
/ 24 октября 2011

Массив не содержит никаких элементов - это пустой массив.Поэтому, когда вы запрашиваете первый элемент в массиве (элемент, содержащийся в индексе 0), массив говорит: «У меня нет элемента в индексе 0».Это «говорит» об этом, бросая исключение.В вашем случае исключение составляет java.lang.ArrayIndexOutOfBoundsException: 0

Это означает, что запрошенный вами индекс находится за пределами массива.Другими словами, массив имеет длину (это границы).Когда его длина равна 0 (он пуст) и вы запрашиваете 1-й элемент, массив сообщает вам, что запрошенный вами элемент недоступен, поскольку массив не имеет длины даже в 1 элемент.

5 голосов
/ 24 октября 2011

Это означает, что массив меньше индекса. В этом случае это означает, что массив пуст.

Вы должны передать аргумент командной строки, чтобы иметь значение там. И если это необходимо, вам лучше добавить проверку, например

if (args.length == 0) {
    throw new IllegalArgumentException("year is required");
}
4 голосов
/ 24 октября 2011

Это означает, что он меньше, чем индекс.Другими словами, аргументов командной строки не было, и вы предполагаете, что был хотя бы один.

1 голос
/ 24 октября 2011

Вы обращаетесь к индексу массива, который не существует. Это может произойти для любого индекса, который меньше 0 или больше или равен длине массива.

Добавить это

if(args != null || args.length < 1) {
  throw new IllegalArgumentException("Please provide an argument.");
}
0 голосов
/ 24 октября 2011

Брошенный, чтобы указать, что к массиву обращались с недопустимым индексом.Индекс либо отрицателен, либо больше или равен размеру массива.

Вот проверка на это.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...