如何退出两个嵌套循环? [复制]

Posted

技术标签:

【中文标题】如何退出两个嵌套循环? [复制]【英文标题】:How do exit two nested loops? [duplicate] 【发布时间】:2011-10-02 01:44:05 【问题描述】:

我使用 Java 已经有一段时间了,但我在循环方面的教育有些欠缺。我知道如何创建 Java 中存在的每个循环并跳出循环。但是,我最近想到了这个:

假设我有两个嵌套循环。我可以只使用一个break 语句来打破这两个循环吗?

这是我目前所拥有的。

int points = 0;
int goal = 100;
while (goal <= 100) 
    for (int i = 0; i < goal; i++) 
        if (points > 50) 
           break; // For loop ends, but the while loop does not
        
        // I know I could put a 'break' statement here and end
        // the while loop, but I want to do it using just
        // one 'break' statement.
        points += i;
    

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

在 Java 中,您可以使用标签来指定要中断/继续哪个循环:

mainLoop:
while (goal <= 100) 
   for (int i = 0; i < goal; i++) 
      if (points > 50) 
         break mainLoop;
      
      points += i;
   

【讨论】:

@Grzegorz 我确实怀念过去不用有人指点我就可以使用 goto 的美好时光;) @ziyao 只要代码清楚发生了什么(目的地在 goto 附近)就可以了,恕我直言,更干净 xkcd.com/292,也就是说,php 允许你“打破 2;”恕我直言,Java 版本更干净且可维护。 是的,虽然我通常更喜欢将内部循环封装在一个额外的函数中,因为这通常更清晰,但使用 goto 肯定比使用额外的布尔变量并设置它更清晰。 我不敢相信我不知道这一点!非常感谢您的新课程!【参考方案2】:

是的,你可以写break with label 例如:

int points = 0;
int goal = 100;
someLabel:
while (goal <= 100) 
   for (int i = 0; i < goal; i++) 
      if (points > 50) 
         break someLabel;
      
   points += i;
   

// you are going here after break someLabel;

【讨论】:

【参考方案3】:

有很多方法可以给这只猫剥皮。这是一个:

int points = 0;
int goal = 100;
boolean finished = false;
while (goal <= 100 && !finished) 
   for (int i = 0; i < goal; i++) 
      if (points > 50) 
         finished = true;
         break;
      
   points += i;
   

更新:哇,不知道打破标签。这似乎是一个更好的解决方案。

【讨论】:

谢谢!我希望我能接受所有的答案! 这很酷。不过,您的回答确实有道理。 :)【参考方案4】:

小学,亲爱的华生……

int points = 0;
int goal = 100;

while (goal <= 100) 
  for (int i = 0; i < goal; i++) 
    if (points > 50) 
      goal++;
      break;
    
  points += i;
  

int points = 0;
int goalim = goal = 100;

while (goal <= goalim) 
  for (int i = 0; i < goal; i++) 
    if (points > 50) 
      goal = goalim + 1;
      break;
    
  points += i;
  

【讨论】:

【参考方案5】:

您可以重置循环控制变量。

int points = 0;
int goal = 100;
while (goal <= 100) 
   for (int i = 0; i < goal; i++) 
      if (points > 50) 
         i = goal = 101;
      
   points += i;
   

【讨论】:

【参考方案6】:

您不应该在客观语言中使用标签。 你需要重写 for/while 条件。

所以你的代码应该是这样的:

int points = 0;
int goal = 100;
while (goal <= 100 && points <= 50) 
    for (int i = 0; i < goal && points <= 50; i++) 
        points += i;
    


// Now 'points' is 55

【讨论】:

这并不能真正回答问题。这更像是一个评论。 帖子已更新为示例代码 你说的“客观语言”是什么意思Objective-C?

以上是关于如何退出两个嵌套循环? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中,如何跳出当前的多重嵌套循环?

如何将两个for循环嵌套使用,要求内层循环结束,外层也一起结束。

C / C ++如何复制没有嵌套循环的多维char数组?

跳出嵌套循环

在JAVA中如何跳出当前的多重嵌套循环?

带有 Paramiko 的嵌套 SSH 退出 while 循环