两个while循环中的break语句

32

假设我有以下代码:

while (a) {
  while (b) {
    if (b == 10) {
      break;
    }
  }
}

问题:break语句会让我跳出两个循环还是只有内部的一个循环?谢谢。


如果你想要从两个嵌套的 while 循环中跳出,你可以使用标签... https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/goto - Ivandro Jao
11个回答

38
在你的例子中,break语句将使你退出while(b)循环。
while(a) {

   while(b) {

      if(b == 10) {
         break;
      }
   }  
   // break will take you here.
}

6
如果我想要打破 while-A 怎么办? - oneofakind
1
@oneofakind,你可以在注释行所示的位置再使用一个break语句。 - Abhishekkumar
4
如果您想要跳出这两个循环,请在第一个while循环上加上标签,比如"outer",然后使用"break outer;"来跳出循环。请参考:https://gist.github.com/bseib/f5ee5c5baa31fa116feb715bd4037cb5 - broc.seib

34

它只会跳出最内层的while循环。使用标签,您可以跳出两个循环:请看这个例子


public class Test {
  public static void main(String[] args) {
    outerloop:
    for (int i=0; i < 5; i++) {
      for (int j=0; j < 5; j++) {
        if (i * j > 6) {
          System.out.println("Breaking");
          break outerloop;
        }
        System.out.println(i + " " + j);
      }
    }
    System.out.println("Done");
  }
}

1
最好使用标志而不是标签,因为标签很容易导致代码混乱。 - Shafi
7
我会更进一步地说,最好使用函数并从内部循环中返回。 - Ivan Koblik

12

仅从内部循环中使用。如果您希望跳出到特定的循环,请使用标记的break

label1:
for(){
  label2:
  for(){
      if(condition1)
      break label1;//break outerloop

      if(condition2)
      break label2;//break innerloop
  }
}

另请参阅


6
while (a) {

   while (b) {

      if (b == 10) {
          break;
      }
   }
}

在上面的代码中,您将会使用 break 命令中断最内层循环(即立即循环)。
您可以使用带有标签的 break 命令一次性中断两个循环。
label1: 
while (a) {

   while (b) {

      if (b == 10) {
          break label1;
      }
   }
}

6

@Abhishekkumar

Break关键字的衍生根源来自于C语言和汇编语言,它的唯一目的是将控制权传递出复合语句,即循环、条件、方法或过程。

请参考以下链接...

http://tigcc.ticalc.org/doc/keywords.html#break

http://www.functionx.com/cpp/keywords/break.htm

http://en.wikipedia.org/wiki/Break_statement#Early_exit_from_loops

因此,如果您想同时退出两个循环,则必须使用两个Break,即一个在内部循环中,一个在外部循环中。

但是,如果您想同时停止两个循环,那么您必须使用exit或return。


5

它将跳出直接包含它的循环。

但是,您可以跳转到标签:

myLabel:

while(a) {    
    while(b) {    
        if(b == 10)
            break myLabel;
    }
}

我通常不喜欢使用这种模式,因为它很容易导致代码混乱。使用无标签的break或flag来终止您的循环。


2
作为一个有趣的注释,在PHP中,break语句接受一个数字参数,用于指定你想要中断的外部循环数量,像这样:
$i = 0;
while (++$i) {
   switch ($i) {
      case 5:
         echo "At 5<br />\n";
         break 1;  /* Exit only the switch. */
      case 10:
         echo "At 10; quitting<br />\n";
         break 2;  /* Exit the switch and the while. */
      default:
         break;
  }
}

2

您可以设置一个标志来将信息传递给外部while循环。在这种情况下,信息可以存储在变量breakOuterLoopFlag中,外部while循环根据此信息进行操作。 请参见下面的伪代码:

int breakOuterLoopFlag = 0;

while(a){
   
  while(b){
      if(b == 10) {
        breakOuterLoopFlag = 1;
        break;
      }
    }

   if(breakOuterLoopFlag == 1) {
     break;
   }
}

1
一个break语句将会退出包含该break语句的最内层循环。
在这个例子中,是内部while循环。

0

Java中的break语句无法将您从多个嵌套循环中退出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接