标记为 Continue 的语句编译失败

Labeled Continue statement fails to compile

import java.util.Scanner;
class testing
{
    int i ; int j ;
    Scanner sc = new Scanner(System.in) ;
    void lolwa()
    {
        out:
        for(i = 0 ; i <= 6 ; i++)
        {
            System.out.println(i);
        }
        System.out.println("Enter 1 to restart loop");
        System.out.println("Enter 2 to continue till 10");
        j = sc.nextInt();
        if(j == 1)
        {
            continue out ;
        }
        if(j == 2)
        {
            for(i = 7 ; i <= 10 ; i++)
            {
                System.out.println(i);
            }
        }
    }
}

我用 BlueJ 编译了它,它说:"Undefined label out"。刚学会用continue语句,所以想不通问题

你的out标签"annotates"这个for循环:

out:
for(i = 0 ; i <= 6 ; i++)
{
    System.out.println(i);
}

因此,为了继续使用标签 out,它需要 那个 for 循环中。在 for 循环结束后使用它是没有意义的。这将编译,例如:

out:
for(int i = 0; i <= 6; i++)
{
    System.out.println(i);
    continue out;
}

但是,在这种情况下,您不需要带标签的 continue 语句。没有歧义。只有一个循环可以 "continued" out.

Oracle tutorial 解释得很好。


值得一提的是,我什至不记得上次不得不使用带标签的 continue 是什么时候了——也许永远不会。我会避开它们,除非你几乎别无选择。

我觉得你没有掌握continue label的用法:它必须在循环中使用,用于跳转到你的特定标签。 if 语句 不是 循环。只需将您的 continue out 替换为对 lolwa() 的调用,您将获得所需的行为:您将被发送到函数的开头。