[英]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.