Java 使用带标签的break获得无法访问的语句错误
在这里,我想将几行作为输入,直到其中一行中只输入了“0”。并按与输入相反的顺序打印这些行。然而,我在使用带标签的break时遇到了困难。我得到以下错误:Java 使用带标签的break获得无法访问的语句错误,java,unreachable-code,Java,Unreachable Code,在这里,我想将几行作为输入,直到其中一行中只输入了“0”。并按与输入相反的顺序打印这些行。然而,我在使用带标签的break时遇到了困难。我得到以下错误: PrintRevOrderLines.java:17: error: unreachable statement System.out.println("\nReversed order of lines is as follows..\n"); ^ 1 error 我无法理解为
PrintRevOrderLines.java:17: error: unreachable statement
System.out.println("\nReversed order of lines is as follows..\n");
^
1 error
我无法理解为什么无法到达第17行。
我知道我可以很容易地只使用'break'(而不是带标签的break)语句,允许'count'变量的增量比实际值增加一倍,然后在打印时,执行以下操作:for(int I=count-1;I>=0;I--)
并避免打印0,但我想
import java.io.*;
class PrintRevOrderLines
{
public static void main(String[] args) throws IOException
{
int count = 0;
String inputs[] = new String[100];
System.out.println("Enter 0 and hit enter to stop inputting values..\n");
BufferedReader B = new BufferedReader(new InputStreamReader(System.in));
for(int i=0;;i++)
thisblock:
{
inputs[i] = B.readLine();
if(inputs[i].charAt(0)=='0'){break thisblock;}
count++;
}
System.out.println("\nReversed order of lines is as follows..\n");
for(int i=count;i>=0;i--)
{
System.out.println(" "+inputs[i]);
}
}
}
发生的情况是,您的
for
循环将永远不会结束,因为您没有设置终止条件,也没有在for
的主体中“中断”它。试试这个,你会看到:
for (int i = 0;; i++)
System.out.println("here");
System.out.println("\nReversed order of lines is as follows..\n");
您将得到相同的“不可修复代码”
编辑:
Reversed order of lines is as follows..
0
3
2
1
试试这个:
boolean flag = false;
for (int i = 0;; i++) {
thisblock: {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
flag = true;
break thisblock;
}
count++;
}
if (flag)
break;
}
输出:
Reversed order of lines is as follows..
0
3
2
1
发生的情况是,您的
for
循环将永远不会结束,因为您没有设置终止条件,也没有在for
的主体中“中断”它。试试这个,你会看到:
for (int i = 0;; i++)
System.out.println("here");
System.out.println("\nReversed order of lines is as follows..\n");
您将得到相同的“不可修复代码”
编辑:
Reversed order of lines is as follows..
0
3
2
1
试试这个:
boolean flag = false;
for (int i = 0;; i++) {
thisblock: {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
flag = true;
break thisblock;
}
count++;
}
if (flag)
break;
}
输出:
Reversed order of lines is as follows..
0
3
2
1
发生的情况是,您的
for
循环将永远不会结束,因为您没有设置终止条件,也没有在for
的主体中“中断”它。试试这个,你会看到:
for (int i = 0;; i++)
System.out.println("here");
System.out.println("\nReversed order of lines is as follows..\n");
您将得到相同的“不可修复代码”
编辑:
Reversed order of lines is as follows..
0
3
2
1
试试这个:
boolean flag = false;
for (int i = 0;; i++) {
thisblock: {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
flag = true;
break thisblock;
}
count++;
}
if (flag)
break;
}
输出:
Reversed order of lines is as follows..
0
3
2
1
发生的情况是,您的
for
循环将永远不会结束,因为您没有设置终止条件,也没有在for
的主体中“中断”它。试试这个,你会看到:
for (int i = 0;; i++)
System.out.println("here");
System.out.println("\nReversed order of lines is as follows..\n");
您将得到相同的“不可修复代码”
编辑:
Reversed order of lines is as follows..
0
3
2
1
试试这个:
boolean flag = false;
for (int i = 0;; i++) {
thisblock: {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
flag = true;
break thisblock;
}
count++;
}
if (flag)
break;
}
输出:
Reversed order of lines is as follows..
0
3
2
1
您可以对各种循环使用
break
语句,但也可以单独使用标签。换句话说,下面的工作
label:
break label;
在代码中,break thisblock
从thisblock
标签断开,而不是从循环断开。
考虑到这一点以及for
循环没有终止表达式的事实,编译器知道循环永远不会结束,因此它后面的任何代码都不会执行
我不知道为什么你有一个标签,但在这种情况下,你可以简单地删除它
for (int i = 0;; i++) {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
break;
}
count++;
}
您可以对各种循环使用
break
语句,但也可以单独使用标签。换句话说,下面的工作
label:
break label;
在代码中,break thisblock
从thisblock
标签断开,而不是从循环断开。
考虑到这一点以及for
循环没有终止表达式的事实,编译器知道循环永远不会结束,因此它后面的任何代码都不会执行
我不知道为什么你有一个标签,但在这种情况下,你可以简单地删除它
for (int i = 0;; i++) {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
break;
}
count++;
}
您可以对各种循环使用
break
语句,但也可以单独使用标签。换句话说,下面的工作
label:
break label;
在代码中,break thisblock
从thisblock
标签断开,而不是从循环断开。
考虑到这一点以及for
循环没有终止表达式的事实,编译器知道循环永远不会结束,因此它后面的任何代码都不会执行
我不知道为什么你有一个标签,但在这种情况下,你可以简单地删除它
for (int i = 0;; i++) {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
break;
}
count++;
}
您可以对各种循环使用
break
语句,但也可以单独使用标签。换句话说,下面的工作
label:
break label;
在代码中,break thisblock
从thisblock
标签断开,而不是从循环断开。
考虑到这一点以及for
循环没有终止表达式的事实,编译器知道循环永远不会结束,因此它后面的任何代码都不会执行
我不知道为什么你有一个标签,但在这种情况下,你可以简单地删除它
for (int i = 0;; i++) {
inputs[i] = B.readLine();
if (inputs[i].charAt(0) == '0') {
break;
}
count++;
}
你的
打破这个区块
导致您跳出此块
(显然),这是因为它位于for
循环中,导致循环再次迭代而不是退出它
由于该循环没有其他终止方式,因此您将永远无法超出函数的该部分。请注意,如果删除代码中当前无法访问的部分,则将突出显示的下一个
只需使用普通的中断
:
for(int i=0;i<100;i++) //i<100 check so you don't get an index exception when you that 101st character.
{
inputs[i] = B.readLine();
if(inputs[i].charAt(0)=='0'){break;}
count++;
}
你的打破这个区块
导致您跳出此块
(显然),这是因为它位于for
循环中,导致循环再次迭代而不是退出它
由于该循环没有其他终止方式,因此您将永远无法超出函数的该部分。请注意,如果删除代码中当前无法访问的部分,则将突出显示
的下一个
只需使用普通的中断
:
for(int i=0;i<100;i++) //i<100 check so you don't get an index exception when you that 101st character.
{
inputs[i] = B.readLine();
if(inputs[i].charAt(0)=='0'){break;}
count++;
}
你的打破这个区块
导致您跳出此块
(显然),这是因为它位于for
循环中,导致循环再次迭代而不是退出它
由于该循环没有其他终止方式,因此您将永远无法超出函数的该部分。请注意,如果删除代码中当前无法访问的部分,则将突出显示
的下一个
只需使用普通的中断
:
for(int i=0;i<100;i++) //i<100 check so you don't get an index exception when you that 101st character.
{
inputs[i] = B.readLine();
if(inputs[i].charAt(0)=='0'){break;}
count++;
}
你的打破这个区块代码>导致您跳出此块
(显然)w