首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中,break如何与嵌套循环交互?

问在Java中,break如何与嵌套循环交互?
EN

Stack Overflow用户
提问于 2011-02-24 05:39:35
回答 4查看 47.9K关注 0票数 42

我知道break语句跳出循环,但它是跳出嵌套循环还是只跳出它当前所在的循环?

EN

回答 4

Stack Overflow用户

发布于 2011-02-24 05:41:38

没有任何修饰,break就会跳出最内层的循环。因此,在此代码中:

代码语言:javascript
复制
while (true) { // A
    while (true) { // B
         break;
    }
}

break只退出循环B,因此代码将永远循环。

但是,Java有一个称为“命名中断”的特性,您可以在其中命名循环,然后指定要中断的循环。例如:

代码语言:javascript
复制
A: while (true) {
    B: while (true) {
         break A;
    }
}

这段代码不会永远循环,因为break显式地离开了循环A。

幸运的是,同样的逻辑也适用于continue。默认情况下,continue执行包含continue语句的最内层循环的下一次迭代,但也可以通过指定要继续执行的循环的标签来跳转到外部循环迭代。

在Java语言以外的语言中,例如C和C++,这种“标记为break”的语句是不存在的,并且不容易打破多重嵌套循环。这可以使用goto语句来完成,尽管这通常是不受欢迎的。例如,假设您愿意忽略Dijkstra的建议并使用goto,那么在C中嵌套的break可能是什么样子

代码语言:javascript
复制
while (true) {
    while (true) {
        goto done;
    }
}
done:
   // Rest of the code here.

希望这能有所帮助!

票数 84
EN

Stack Overflow用户

发布于 2011-02-24 05:40:40

默认情况下,它跳出最内层的循环。但是你也可以使用specify labels and make it jump of outer loops。

票数 4
EN

Stack Overflow用户

发布于 2013-09-07 20:49:46

您还可以通过使用异常来突破,这样您就可以处理多种原因

代码语言:javascript
复制
 void fkt1() {
    try {
        while (true)
            fkt2();
    } catch (YourAbortException e) {
        e.printStackTrace();
    }

    //go on
}

void fkt2() {
    while (true)
        if (abort)
            throw new YourAbortException();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5097513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档