0

当我尝试从另一个循环访问 for 循环时,出现以下错误。我该怎么做才能有人解释。

public class Test {
   public static void main(String...rDX) {
      runing:
      for (int i = 1; i < 10; i++)
         System.out.print(i);
      for(int i = 1; i < 10; i++) {
         if (i == 5) {
            continue runing;
         }
      }
   }
}

错误:java:28:错误:未定义标签:运行继续运行;^ 1 个错误

4

3 回答 3

3

JLS说:

标识符被声明为立即包含的语句的标签。... 与 C 和 C++ 不同,Java 编程语言没有 goto 语句;标识符语句标签与breakcontinue语句一起使用......出现在带标签的语句中的任何位置。

带标签语句的标签范围是立即包含的语句。

在您的情况下,紧随标签的 for 循环runing没有提及标签。第二个 for 循环尝试继续到标签。但它不是第一个 for 循环的一部分,因此是紧随其后的语句。

这会导致编译时错误。

因此,为了在语法上正确地使用标签从一个 for 循环跳转到另一个 for 循环,您需要一个包含标签的外循环。但我认为这不是正确的方法。

于 2018-10-19T06:44:10.613 回答
2

你不能这样做,因为你只能中止一系列嵌套for的 s 并继续在一些 external / parent 上for。您不能继续使用for恰好在附近的其他 s。但是你可以用它来做例如

public class Test {
    public static void main(String...rDX) {
        runing: for (;;) { // infinite loop
            for (int i = 1; i < 10; i++)
                System.out.print(i);
            for(int i = 1; i < 10; i++) {
                if (i == 5) {
                    continue runing;
                }
            }
            break; // = break runing; effectively never reached
                   // because above "continue" will always happen
        }
    }
}

这具有所需的(?)效果,因为它继续新添加的外循环,该外循环返回第一个循环。

(?) = 至少它在编译时会做什么——我怀疑你是否真的想要这样,因为你仍然会打印 1..10,然后在下一步中无形地数到 5,并且对该数字不做任何事情。

于 2018-10-19T06:53:03.900 回答
0

正如 LuCio 已经说过的,这里的问题是第二个循环不是第一个循环的一部分。

如果您嵌套for示例中的循环,它将起作用:

public static void main(String[] args) {
    runing:
    for (int i = 1; i < 10; i++) {
        System.out.print(i);
        for (int j = 1; j < 10; i++) {
            if (j == 5) {
                continue runing;
            }
        }
    }
}

当然,这只是它如何工作的一个示例,我不确定这是否是您的应用程序所需的实际逻辑。

于 2018-10-19T06:46:50.380 回答