问题描述
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 中很少使用的特性。