为什么此代码显示“无法访问的代码”错误??我该如何解决?

问题描述

public class Array {
    public static void main(String[] args) {        
        int[] arr= {5,6,9,-5,-2,4,-3,1,-1};
        
        int i=0;
        int n=arr.length;
        int j=n-1;
        while(true) 
            while(arr[i]>0 && i<j) {
                while(arr[j]<0 && i<j) {
                    if(i<j) {
                        int temp=arr[i];
                        arr[i]=arr[j];
                        arr[j]=temp;
                        i++;
                        j--;
                    }else 
                        break;
                }
                
            }
        for(int x=0;x<arr.length;x++) {
            System.out.print(arr[x]+" "); //unreachable code
        }
    }
}

为什么此代码显示“无法访问的代码错误? 我该如何解决?我该如何解决这个错误,请帮忙?

解决方法

都是因为这行代码:

    while(true) 

for 循环 上的其余代码将无法访问,因为第一个 while 循环无法终止,从而导致您的程序无限循环运行

无法访问的代码:

for(int x=0;x<arr.length;x++) {
    System.out.print(arr[x]+" "); //unreachable code
}

要解决此问题,您需要为 first while 条件设置一个变量,一旦满足条件,该变量就会以某种方式更改值。根据您的代码,您可以将其放在代码的 else 部分:

boolean run = true;
while(run) {
        while(arr[i]>0 && i<j) {
            while(arr[j]<0 && i<j) {
                if(i<j) {
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                    i++;
                    j--;
                } else {
                     run = false; 
                     break;
                 }
            }
            
        }
}
,

break 离开它所在的最近的最内层循环,在您的情况下为 while(arr[j]<0 && i<j)。这意味着您的 while(true) 是一个无限循环。

您可以通过维护一个会触发外部中断的标志来解决此问题:

boolean goOn = true;
while(goOn) 
    while(goOn && arr[i]>0 && i<j) {
        while(goOn && arr[j]<0 && i<j) {
            if(i<j) {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                i++;
                j--;
            }else  {
                goOn = false;
                break;
            }
        }
        
    }
for(int x=0;x<arr.length;x++) {
    System.out.print(arr[x]+" "); //unreachable code
}

或者创建一个标签并break在那里:

while(true) 
    while(arr[i]>0 && i<j) {
        while(arr[j]<0 && i<j) {
            if(i<j) {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                i++;
                j--;
            }else  {
                break exit;
            }
        }
        
    }
exit:
for(int x=0;x<arr.length;x++) {
    System.out.print(arr[x]+" "); //unreachable code
}

后者是 Java 中很少使用的特性。