打破嵌套循环

Ban*_*kin 8 .net c# labels nested-loops

当有嵌套循环时,有人能告诉我如何打破主循环吗?
例*:

/*Main loop*/
for(int y = 0; y < 100; y+=10)
{
    /*Sub loop*/
    for (int x = 0; x < 100; x += 10)
    {
        if(x == 60) 
        { 
            //Break the main loop 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

*这段代码什么都不做,这只是一个例子

我应该把它放在"Break main loop"评论的位置?在java中有标签,我可以打破(当我将标签设置为名为"MainLoop"的主循环时,我可以写"break MainLoop;"并且它将是有效的),但我能在这做什么?

谢谢你的建议!

fge*_*fge 17

goto!

我不理解这种持续的模因,认为这goto被认为是"有害的".如果使用得当,它非常强大,就是这种情况.


Cod*_*aos 10

  • 重构因此您不需要以这种方式退出嵌套循环.
    使用return通过将环插入一个单独的功能往往是可能的.
  • goto.
  • 使用旗帜(丑陋)

  • `goto`是完全合法的,这是它的最佳用途,它比任何其他选项都更有效.没有程序员应遵守"从不使用`goto`"这样的规则,相反,当**使用`goto`时你应该知道**. (6认同)
  • IMO flag-break-checkflag-break比goto更加丑陋.但当然,重构是可能的首选. (4认同)
  • 没有人应该在高级语言中使用`goto`. (2认同)
  • @IAbstract这是"完全"的情况,其中`goto`是最好的答案.停止反刍你从未被教过的"永远不要使用goto"垃圾.在正确的情况下使用正确的工具. (2认同)

Tud*_*dor 7

使用标志来表示终止:

for(int y = 0; y < 100; y+=10)
{
     bool flag = false;
     for(int x = 0; x < 100; x += 10)
     {
        if (x == 56)
        {
           flag = true;
           break;
        }
     }

     if(flag) break;
}
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢转到这个解决方法.(当然只有重构不是好选择) (2认同)

Mat*_*cey 5

有人会建议我使用该goto语句,但会遭到我的抨击,但打破多个循环是它可能非常有用(且高效)的地方之一:

/*Main loop*/
for(int y = 0; y < 100; y+=10)
{
    /*Sub loop*/
    for (int x = 0; x < 100; x += 10)
    {
        if(x == 56) 
        { 
            goto MainLoopDone;
        }
    }
}

MainLoopDone:
// carry on here
Run Code Online (Sandbox Code Playgroud)

  • 当年轻的编码人员使用它们时,它们会很糟糕,并导致产生意粉代码。作为开发人员,您应该使用可用的工具,goto是摆脱多个嵌套循环的最有效方法。 (5认同)