Почему нет ошибки при выполнении оператора IF в этом алгоритме? - PullRequest
0 голосов
/ 15 июня 2019

Я повторял некоторые ранее пройденные темы Java и мне стало интересно, как именно работает алгоритм? Этот алгоритм находит максимальное число в массиве целых и возвращает его индекс.

public static int findIndexOfMax(int[] numbers) {
    int index = 0;
    for (int i = 1; i < numbers.length; i++) { //i = 0 doesn't seem to change anything
        if (numbers[i] > numbers[index]) { //numbers[1] doesn't exist and still no errors
            index = i;
        }
    }
    return index;
}

public static void main(String[] args) {

    System.out.println(findIndexOfMax(new int[] {99})); //passing an array with a single element
}

Звучит глупо, но почему в операторе IF не возникает ошибка, если я передаю в метод массив с одним элементом? Там мы сравниваем несуществующие числа [1] с другим int (так как первая итерация для i = 1), но мы не получаем исключение ArrayIndexOutOfBounds. В чем причина?

1 Ответ

3 голосов
/ 15 июня 2019

Если вы передадите массив с одним элементом, тело цикла никогда не будет выполнено.i инициализируется с помощью 1, и, таким образом, условие i < numbers.length всегда false.

Тело цикла пропускается, и возвращается index из 0.

...