当我尝试从另一个循环访问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个错误
答案 0 :(得分:3)
JLS说:
Identifier被声明为立即数的标签 包含的声明。与C和C ++不同,Java编程语言没有goto语句。标识符语句标签与
break
或continue
语句一起使用...出现在带标签的语句中的任何地方。
带标签的语句的标签范围是紧随其后的语句。
在您的情况下,立即跟随标签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;
}
}
}
}
当然,这只是它如何工作的一个示例,我不确定这是否是您的应用程序所需的实际逻辑。