打破嵌套循环和主循环[重复]

Posted

技术标签:

【中文标题】打破嵌套循环和主循环[重复]【英文标题】:Breaking nested loop and main loop [duplicate] 【发布时间】:2013-03-09 16:13:36 【问题描述】:

我有以下代码:

int x = 100; //Or some other value

while(x > 0) 

    for(int i = 5; i > 0; i++) 

        x = x-2;

        if(x == 0)
            break;

        


但是,这只会破坏 for 循环。我怎样才能让它同时打破 for 和 while 循环?

干杯!

【问题讨论】:

考虑到x在你break时等于0,while条件也会为假;) 【参考方案1】:

您可以使用带标签的中断,它将执行重定向到标签标记的块之后

OUTER:
while(x > 0) 
    for(int i = 5; i > 0; i++) 
        x = x-2;
        if(x == 0)
            break OUTER;
    

虽然在那种特定情况下,一个简单的break 会起作用,因为如果x == 0 也将退出。

【讨论】:

必填项:xkcd.com/292 干杯!那行得通:) @akaIDIOT 将您发送到数英里之外的 goto 和退出嵌套循环之间是有区别的。我认为后者很好。 @assylias 可以简单地使用这样的标签。我个人只是简单地避免它们,并寻找将事情稍微重构为不那么痒的方法(例如使用return 来自隐藏一堆循环的复杂性的单独方法)。总而言之:每个人都有自己的:) @akaIDIOT 老实说,我也会尝试重构它 - 但我可以想象不方便的情况。【参考方案2】:
bool done=false;
while(!done && x > 0) 
    for(int i = 5;!done &&  i > 0 ; i++) 
        x = x-2;
        if(x == 0)
            done=true;
            break ;
        
    

【讨论】:

【参考方案3】:

看到这个example

Outer:
    for(int intOuter=0; intOuter < intArray.length ; intOuter++)
    
      Inner:
      for(int intInner=0; intInner < intArray[intOuter].length; intInner++)
      
        if(intArray[intOuter][intInner] == 30)
        
          blnFound = true;
          break Outer;
          

      
    

【讨论】:

【参考方案4】:

尽量避免中断,总有另一种方式来编写你的循环,这样你就不需要它了,如果其他人必须修改你的代码,它会更“漂亮”并且更容易理解。在您的示例中,while 循环是不必要的,但可以向您展示它是如何实现的:

while(x > 0) 

  for(int i = 5; i > 0 && x!=0; i++) 

    x = x-2;

  


如果 x 等于 0,将离开 for 循环。然后将验证您的 while 条件:x 小于 0(为零),因此您的 while 循环也将停止执行。

【讨论】:

以上是关于打破嵌套循环和主循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章

打破 JavaScript 中嵌套循环的最佳方法是啥?

如何打破 Java 中的嵌套循环?

打破R中的嵌套循环

Python打破嵌套的for循环并重新启动while循环

如何打破 Dart 中的嵌套循环

如何打破 Objective-C 中的两个嵌套 for 循环?