两个while循环中的break语句

时间:2012-09-12 17:12:26

标签: java while-loop break

假设我有这个:

while(a){

  while(b){

   if(b == 10)
     break;
 }
}

问题: break语句会将我从两个循环中取出还是仅从内循环中取出?谢谢。

11 个答案:

答案 0 :(得分:30)

它只会破坏最直接的while循环。使用标签可以打破两个循环:看看这个取自here

的例子
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 :(得分:25)

在你的示例中,break语句将带你离开while(b)循环

while(a) {

   while(b) {

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

答案 2 :(得分:10)

仅来自内部,如果您希望打破特定循环,请使用带标记的中断

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

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

另见

答案 3 :(得分:6)

while(a){

  while(b){

   if(b == 10)
     break;
 }
}

在上面的代码中,您将打破最里面的循环,其中(即。immediate loop)使用break

您可以使用break label

一次性破坏两个循环
label1: 
       while(a){

                  while(b){

                      break label1;
                  }
              }

答案 4 :(得分:4)

它将突破立即包围它的循环。

然而,您可以打破标签:

myLabel:

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

我一般不喜欢使用这种模式,因为它很容易导致意大利面条代码。使用未标记的中断或标志来终止循环。

答案 5 :(得分:4)

@Abhishekkumar

Break关键字有它来自C和Assembly的派生根,并且它的唯一目的是将控制权从复合语句中传出,即循环,条件,方法或程序。

请参考这些......

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

所以,如果你想同时退出两个循环,那么你将使用两个Breaks,即一个在内循环中,一个在外循环中。

但是你想要同时停止两个循环,那么你必须使用退出或返回。

答案 6 :(得分:1)

break语句会将您带出封闭break语句的最内层循环。

在示例中,内部while循环。

答案 7 :(得分:0)

java break语句不会带你离开多个嵌套循环。

答案 8 :(得分:0)

作为一个奇怪的注释,在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;
  }
}

答案 9 :(得分:0)

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

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<div class="custom-control custom-checkbox mb-3">
  <input type="checkbox" class="custom-control-input" id="customControlValidation1" required>
  <label class="custom-control-label">Check this custom checkbox</label>
</div>

答案 10 :(得分:-1)

当然只有内循环。