如何在java中使用标签从一个for循环跳到另一个for循环?
当我试图从另一个循环访问for循环时,会出现以下错误。 我该怎么做?有人能解释一下吗如何在java中使用标签从一个for循环跳到另一个for循环?,java,continue,labeled-statements,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) {
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;
}
}
}
}
公共类测试{
公共静态void main(字符串…rDX){
跑步:
对于(int i=1;i<10;i++)
系统输出打印(一);
对于(int i=1;i<10;i++){
如果(i==5){
继续运行;
}
}
}
}
错误:
java:28:错误:未定义的标签:正在运行
继续运行;
^
1错误说明:
该标识符被声明为的标签
所载声明。。。与C和C++不同,java编程语言没有GOTO语句;标识符语句标签与break
或continue
语句一起使用。。。出现在标记语句中的任何位置
已标记语句的标签范围是直接包含的语句
在您的例子中,紧跟在标签runing
后面的for循环没有提到标签。第二个for循环尝试继续到标签。但它不是第一个for循环的一部分,因此下面的语句就不存在了
这会导致编译时错误
因此,为了使用标签在语法上正确地从一个for循环跳转到另一个for循环,您需要一个包含标签的外部循环。但我认为这不是正确的方法。
该标识符被声明为的标签
所载声明。。。与C和C++不同,java编程语言没有GOTO语句;标识符语句标签与break
或continue
语句一起使用。。。出现在标记语句中的任何位置
已标记语句的标签范围是直接包含的语句
在您的例子中,紧跟在标签runing
后面的for循环没有提到标签。第二个for循环尝试继续到标签。但它不是第一个for循环的一部分,因此下面的语句就不存在了
这会导致编译时错误
因此,为了使用标签在语法上正确地从一个for循环跳转到另一个for循环,您需要一个包含标签的外部循环。但我认为这不是正确的方法。正如卢西奥所说,这里的问题是第二个循环不是第一个循环的一部分 如果嵌套示例中的
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;
}
}
}
}
publicstaticvoidmain(字符串[]args){
跑步:
对于(int i=1;i<10;i++){
系统输出打印(一);
对于(int j=1;j<10;i++){
如果(j==5){
继续运行;
}
}
}
}
当然,这只是它如何工作的一个示例,我不确定这是否是应用程序所需的实际逻辑。正如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;
}
}
}
}
publicstaticvoidmain(字符串[]args){
跑步:
对于(int i=1;i<10;i++){
系统输出打印(一);
对于(int j=1;j<10;i++){
如果(j==5){
继续运行;
}
}
}
}
当然,这只是它如何工作的一个示例,我不确定这是否是应用程序所需的实际逻辑。您不能这样做,因为您只能为中止嵌套的
链,并为
继续某些外部/父。对于恰好在附近的
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
}
}
}
公共类测试{
公共静态void main(字符串…rDX){
运行:(;){//无限循环
对于(int i=1;i<10;i++)
系统输出打印(一);
对于(int i=1;i<10;i++){
如果(i==5){
继续运行;
}
}
中断;/=中断运行;实际上从未达到
//因为上面的“继续”总是会发生
}
}
}
这具有所需的(?)效果,因为它与新添加的外循环(返回到第一个循环)一起继续
(?)=至少它在编译时会做什么-我怀疑您是否真的想要这样做,因为您仍然会打印1..10,然后在下一步中不可见地计数到5,并且对该数字不做任何处理。您不能这样做,因为您只能为
中止嵌套的链,并为
继续执行某些外部/父。对于恰好在附近的
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
}
}
}
公共类测试{
公共静态void main(字符串…rDX){
运行:(;){//无限循环
对于(int i=1;i<10;i++)
系统输出打印(一);
对于(int i=1;i<10;i++){
如果(i==5){
继续运行;
}
}
中断;/=中断运行;实际上从未达到
//因为上面的“继续”总是会发生
}
}
}
这具有所需的(?)效果,因为它与新添加的外循环(返回到第一个循环)一起继续
(?)=至少它在编译时会做什么-我怀疑您是否真的想要这样做,因为您仍然会打印1..10,然后在下一步中不可见地计数到5,并且不处理该数字。第二个循环在第一个循环完成后开始迭代。没有什么可以继续。首先,不要在代码中添加随机文本。如果你想列举“跑步”之类的事情,那么就用注释来描述它。第二,你能更清楚地知道你到底想要什么吗?@Matthew