如何使用 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 并且什么都不做那个数字。
当我尝试从另一个循环访问 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
orcontinue
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 并且什么都不做那个数字。