标记为 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()
的调用,您将获得所需的行为:您将被发送到函数的开头。
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()
的调用,您将获得所需的行为:您将被发送到函数的开头。