继续;用于跳过许多循环

Posted

技术标签:

【中文标题】继续;用于跳过许多循环【英文标题】:continue; used to skip many loops 【发布时间】:2011-01-28 09:20:29 【问题描述】:

这是我的代码架构:

while (..)

   for (...; ...;...)
        for(...;...;...)
            if ( )
            
                 ...
                 continue;
            
 

接下来会做什么?他只会让第二个循环迭代一次,不是吗? 我希望它到达while,可以吗?

谢谢!

【问题讨论】:

你应该完全避免内部循环,它们使代码不可读并且极易出错。 @onof 我不同意,至少部分不同意。有时“内部循环”确实是解决问题的最佳方法(有时另一个控制抽象或方法调用更好)。但是,我相信循环构造应该始终使用,因为它有助于缩进并避免将循环中的内容混淆为循环的问题。跨度> 【参考方案1】:

这里的continue 会影响最近的循环 - 您的第二个for。直接跳转while有两种方式:

goto,虽然有时“被认为是有害的”,但这可以说是它仍然存在的主要原因 return

为了说明后者:

while (..)

    DoSomething(..);


void DoSomething(..) 
    for (...; ...;...)
      for(...;...;...)
          if ( )
          
             ...
             return;
          

和前者:

while (..)

   for (...; ...;...)
        for(...;...;...)
            if ( )
            
                 ...
                 goto continueWhile;
            
   continueWhile:
         // needs to be something after a label

【讨论】:

我认为这是我需要的 ;) 非常感谢!【参考方案2】:
while (..)

   for (...; ...;...)
        for(...;...;...)
            if ( )
            
                 ...
                 goto superpoint;
            
superpoint:
//dosomething
 

【讨论】:

据我记忆,不应该使用 goto。 这几乎就是 goto 存在的原因,如果它不是用来使用的,为什么它在语言中? @Pabuc 它不应该被轻率地使用 - 但在这里它可以很好地完成工作。比检查每个级别的标志要简单得多。另请参阅 MSDN example 打破嵌套循环 我不是在谈论你使用它的方式。永远不应该使用 Goto。不知道我在哪里读过它,但作者有一个很好的理由。在 atm 中搜索它,如果我能找到它会发布它 好的,我找不到它,但是,我仍然会将此作为方法并在找到时返回而不是 goto。也许这只是我,但我从不使用 goto - 从不。【参考方案3】:

您应该设置一个变量来确定何时需要离开循环。

while (..)

    bool goToWhile = false; 

    for (...; ... && !goToWhile; ...)
        for (...; ... && !goToWhile; ...)
            if ( )
            
                ...
                goToWhile = true; 
            
 

想出更好的名字;)

【讨论】:

【参考方案4】:

不可能直接因为continue; 只会继续执行当前循环,要进入外循环,你唯一能做的就是设置一些标志并在外循环中检查它

【讨论】:

【参考方案5】:

continuebreak 始终用于接受continuebreak 的最内层循环。在这种情况下,它是代码中最低的 for 循环。

【讨论】:

【参考方案6】:

仅使用 continue 语句是不可能的。 Continue 和 break 语句只影响它们嵌套的最内层循环。

您可以设置一个变量并在外循环中检查它。或者在for语句中重新组织IF语句和break条件。

while (..)

   for (...; ...;...)
   
        for(...;...;...)
            if ( )
            
                 ...
                 skipLoop = true
            
         if (skipLoop)
             continue;
    
 

希望这会有所帮助!

【讨论】:

以上是关于继续;用于跳过许多循环的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby 中,如何跳过 .each 循环中的循环,类似于“继续”[重复]

流程控制语句-continue继续循环

当我遇到特定的“if”条件时,如何跳过一轮“for循环”并继续下一轮?

C语言中continue的用法是啥?

第五次作业

JS基础,你需要掌握的要点!