为什么此代码显示 "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中很少用到的特征。
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中很少用到的特征。