带有break的循环迭代器

com*_*tta 6 java

让我说我的代码如下所示

for(..)
  for(..)
    for(..){
            break;  //this will break out from the most inner loop OR all 3 iterated loops?
    }
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 28

您的示例将仅突破最内层循环.但是,使用带标签的break语句,您可以这样做:

outer:
  for(..)
    for(..)
      for(..){
        break outer;  //this will break out from all three loops
      }
Run Code Online (Sandbox Code Playgroud)

  • 标签显然比管理布尔或抛出异常更清晰,整洁和有效.如果你不能整齐地重构一个方法并返回,那么打破标签是最好的解决方案. (8认同)
  • 或者你可以重构你的代码,以避免嵌套:) (7认同)
  • 我不喜欢标签:( (6认同)
  • @ufukgun:这是你可以摆脱所有循环的唯一方式,无论你喜不喜欢:) (4认同)

Ott*_*ger 11

这只会从内循环中突破.您还可以定义要突破的范围.更多来自语言规范:

没有标签的break语句尝试将控制转移到最内层的封闭开关,while,do或for语句的立即封闭方法或初始化块; 此语句称为中断目标,然后立即正常完成.


Att*_*lus 7

想一想这些问题,也许这样你就可以从单独得到的答案中获得答案(现在已经发布了,我敢肯定):

  • 如果你一个人,你会如何决定?组成一个明显的测试用例.
  • 如果你要发明一种语言并添加一个break结构,它会如何工作?哪一个更有用?哪一个是最受人们期待的?
  • 你会如何解决Java中嵌套for循环的问题?在C或C++中?在没有任何标签的语言中?

你会惊讶于你可以从这些简单的自制练习中学到多少东西.