Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用标签从一个for循环跳到另一个for循环?_Java_Continue_Labeled Statements - Fatal编程技术网

如何在java中使用标签从一个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) {

当我试图从另一个循环访问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;
         }
      }
   }
}
公共类测试{
公共静态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