标记为循环刚结束时中断在Java中不起作用 for(int x=0;x
当我学习Java中带标签的break时,我注意到将标签放在for语句之前和之后会产生不同的结果。在上面的代码中,带有stop2的for循环在打印“Count”3次后不会停止,而另一个循环会停止。有人能解释一下这两者的区别吗?我认为标签上的break会在标签后面打断主体…在第一个示例中,您的语法不正确(针对您想要的行为)。这个标记为循环刚结束时中断在Java中不起作用 for(int x=0;x,java,for-loop,break,labeled-statements,Java,For Loop,Break,Labeled Statements,当我学习Java中带标签的break时,我注意到将标签放在for语句之前和之后会产生不同的结果。在上面的代码中,带有stop2的for循环在打印“Count”3次后不会停止,而另一个循环会停止。有人能解释一下这两者的区别吗?我认为标签上的break会在标签后面打断主体…在第一个示例中,您的语法不正确(针对您想要的行为)。这个 for(int x = 0; x < 5; x++) stop2: { System.out.println("Cou
for(int x = 0; x < 5; x++)
stop2: {
System.out.println("Count");
if (x == 2)
break stop2;
}
stop3: for(int x = 0; x < 5; x++) {
System.out.println("Second");
if (x == 2)
break stop3;
}
for(int x=0;x<5;x++)
第二站:{
系统输出打印项次(“计数”);
如果(x==2)
中断停止2;
}
应该是
for(int x = 0; x < 5; x++)
stop2: {
System.out.println("Count");
if (x == 2)
break stop2;
}
stop2:for(int x=0;x<5;x++){
系统输出打印项次(“计数”);
如果(x==2){
中断停止2;
}
}
或只是
stop2: for (int x = 0; x < 5; x++) {
System.out.println("Count");
if (x == 2) {
break stop2;
}
}
for(int x=0;x<5;x++){
系统输出打印项次(“计数”);
如果(x==2){
打破
}
}
由于未对
中断应用标签时,未标记的中断将应用于第一个(即最里面的)循环,因此在您的情况下,不需要标记的中断。
在Java中,break语句中断包含它的循环。
因此,您的stop2
代码块实际上可以是
for (int x = 0; x < 5; x++) {
System.out.println("Count");
if (x == 2) {
break;
}
}
for(int x=0;x<5;x++){
系统输出打印项次(“计数”);
如果(x==2){
中断停止2;
}
}
有标签的中断示例如下
假设您在一个循环中有一个循环,并且在某些情况下,您希望从外部循环中断。
例如:
stop2:
对于(int x=0;x<5;x++){
for(int y=0;yfor(int x=0;x<5;x++)
第二站:{
系统输出打印项次(“计数”);
如果(x==2)
中断停止2;
}
在这种情况下,当您中断标签stop2时,控件将再次返回for循环,并开始下一次迭代(x=3)
stop3:for(int x=0;x<5;x++){
System.out.println(“第二”);
如果(x==2)
中断停止3;
}
在案例2中,当您断开标签stop3时,控件不会再次返回for循环
我以为贴有标签的破口会在贴有标签后把身体弄坏
否。它会断开标签所附着的语句(或块)
因此:
断开
语句的
将上述内容与此进行对比
stop3: for (int x = 0; x < 5; x++)
{
//stuff
break stop3;
}
for(int x=0;x<5;x++)
{
//东西
打破
}
普通的(未标记的)break
只能在循环或switch语句中使用,它会中断立即封闭的循环或开关
这是关于这个的说法:
“没有标签的break
语句试图将控制权转移到最里面的开关
,while
,do
,或立即封闭方法或初始值设定项的语句;该语句称为break目标,然后立即正常完成。”
“带有标签标识符的break
语句试图将控制权转移到包含标签的语句中(§14.7)具有与其标签相同的标识符;此语句称为中断目标,然后立即正常完成。在这种情况下,中断目标不需要是开关,while
,do
或for
语句
因此,确定break
语句(普通或带标签)的功能的关键是break目标是什么
这一切都有点模糊……这也是只有在绝对必要时才使用带标签语句的另一个很好的理由。我看不出在您的示例中使用它们的理由(作为插图除外)。其中一个应该作为普通的break
编写,另一个应该作为continue
编写
但是(对于怀疑者)根据JLS,这两个示例都是有效的、可编译的Java代码,并且都有定义良好的含义。第一个示例是不合法的。我很惊讶它能编译。@user207421-试试看……并检查我答案中的JLS链接。@user207421如何删除?abreak
没有标签,我ans循环也不需要标签。您的意思是,如果循环有标签,则在查找最内层时不会考虑它。我相信您不是这个意思。谢谢,该示例只是一个说明。
stop2:
for (int x=0; x < 5; x++) {
for (int y=0; y<5;y++) {
if (x == 3 && y == 2) { //just making up some condition for the example
break stop2;
}
}
}
for(int x = 0; x < 5; x++)
stop2: {
System.out.println("Count");
if (x == 2)
break stop2;
}
stop3: for(int x = 0; x < 5; x++) {
System.out.println("Second");
if (x == 2)
break stop3;
}
for (int x = 0; x < 5; x++)
stop2: {
// stuff
break stop2;
}
stop3: for (int x = 0; x < 5; x++)
{
//stuff
break stop3;
}
for (int x = 0; x < 5; x++)
{
//stuff
break;
}