java 逻辑与 && 执行顺序

时间:2021-6-7 作者:qvyue

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

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 也是可以帮助我们注意这个顺序问题的。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。