插入排序遇到的逻辑短路和逻辑判断always true问题

 1 private static void InsertionSort(){
 2         Scanner sc = new Scanner(System.in);
 3         for(int i=0;i<6;i++){
 4             array[i] = sc.nextInt();
 5         }
 6         int a=array.length;
 7         for(int i=1;i<a;i++){
 8             int j=i-1;
 9             System.out.println(j+" "+i);
10             int temp = i;
11                 while(array[temp]<array[j]&&j>=0){
12                     int b = array[j];
13                     array[j]=array[temp];
14                     array[temp] = b;
15                     temp=j;
16                     j--;
17                 }
18         }
19         for(int i=0;i<6;i++){
20             System.out.print(array[i]+" ");
21         }
22     }

此处第11行while的判断中,IDEA会出现always true的提示:

并且测试出现下标越界的错误:

原因在于左边的array[j]编译时已经判断了j非负,后面逻辑短路导致always true。

j--之后变为-1,导致第二次循环时出现下标越界错误。

谨记,不能再犯这种低级错误了!

原文地址:https://www.cnblogs.com/mrlonely2018/p/10466717.html