美文网首页
java 逻辑与 && 执行顺序

java 逻辑与 && 执行顺序

作者: Vector_Wan | 来源:发表于2021-05-23 13:25 被阅读0次

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

    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 逻辑与 && 执行顺序

          本文链接:https://www.haomeiwen.com/subject/hrtzjltx.html