为什么此代码显示 "unreachable code" 错误??我该如何解决?

Why this code is showing "unreachable code" error?? And how can I fix it?

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中很少用到的特征。