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

时间:2018-10-19 06:31:20

标签: java continue labeled-statements

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

3 个答案:

答案 0 :(得分:3)

JLS说:

  

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

带标签的语句的标签范围是紧随其后的语句。

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

这会导致编译时错误。

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

答案 1 :(得分:2)

您不能这样做,因为您只能中止嵌套的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,并且对该数字不执行任何操作

答案 2 :(得分: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;
            }
        }
    }
}

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