如何使用 java 中的标签从一个 for 循环跳转到另一个 for 循环?

how to jump from one for loop to another for loop using label in java?

当我尝试从另一个循环访问 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 个错误

JLS 说:

The Identifier is declared to be the label of the immediately contained Statement. ... Unlike C and C++, the Java programming language has no goto statement; identifier statement labels are used with break or continue statements ... appearing anywhere within the labeled statement.

标记语句的标签范围是直接包含的语句。

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

这会导致编译时错误。

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

正如 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;
            }
        }
    }
}

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

您不能那样做,因为您只能中止嵌套 for 链并继续某些外部/父 for。您无法继续碰巧就在附近的其他 for。但是你可以用它来做,例如

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 并且什么都不做那个数字。