簡體   English   中英

為什么此代碼顯示“無法訪問的代碼”錯誤? 我該如何解決?

[英]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 循環上代碼的 rest 將變得無法訪問,因為第一個 while 循環無法終止,從而導致您的程序在無限循環上運行

無法訪問的代碼:

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

要解決此問題,您需要為第一個 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
}

或創建一個 label 並在那里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 中很少使用的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM