java 逻辑与 && 执行顺序

这是我在写使用递归的方法实现插入排序遇到的问题,我最开始写的代码是:

static void insertSort(int[] arr, int k) {
    // k 是索引
    if (k==1){
        return;
    }
    // 对前面的 k-1 个元素进行排序
    insertSort(arr, k-1);
    // 将位置 k-1 的元素插入到 排序好的部分
    int currentValue = arr[k];
    int index = k-1;
    while (arr[index]>currentValue && index>-1) {
        arr[index+1] = arr[index];
        index--;
    }
    arr[index+1] = currentValue;
}
int[] myList = {2, 97, 31, 87, 13, 91, 42, 82, 94, 91};
int[] myList = {68, 71, 52, 33, 46, 19, 66, 64, 98, 51};

最开始我使用的是上面的数组运行是可以正确排序的,后来我使用下面的数组就出现了问题。

总是在 while 语句的地方报数组越界错误,并且 IDE 提示 index>-1 条件始终满足。

我最开始以为是 while 循环内部逻辑的问题,后来发现应该是逻辑与 && 执行顺序的问题。

Java A&&B 语句,首先执行 A ,如果 A 是 False,则不再执行 B。所以在上面的代码中,会先检查 arr[index] ,如果此时 index 已经越界就会出现错误,只需要把对 index 的检查放到前面就可以了。

所以在使用 && 的时候一定要注意执行顺序的问题,或者在 while 循环里面加一个 if-break 也是可以帮助我们注意这个顺序问题的。

你可能感兴趣的:(java 逻辑与 && 执行顺序)