首页 > 解决方案 > 为什么在这个算法中执行 IF 语句没有错误?

问题描述

我在重复一些以前通过的 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 语句中没有发生错误?在那里,我们将不存在的 numbers[1] 与另一个 int 进行比较(因为第一次迭代是针对 i=1),但我们没有得到 ArrayIndexOutOfBounds 异常。它的原因是什么?

标签: javaarraysif-statementsyntax-error

解决方案


如果您传递一个包含单个元素的数组,则循环的主体将永远不会执行。i初始化为1,因此条件i < numbers.length始终为false

循环的主体被跳过,并返回一个indexof 0


推荐阅读