Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用带标签的break获得无法访问的语句错误_Java_Unreachable Code - Fatal编程技术网

Java 使用带标签的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 我无法理解为

在这里,我想将几行作为输入,直到其中一行中只输入了“0”。并按与输入相反的顺序打印这些行。然而,我在使用带标签的break时遇到了困难。我得到以下错误:

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,但我想

  • 将count的值停止在正确的值,然后
  • 知道为什么无法到达第17行吗
  • 我的代码如下:

    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