web-dev-qa-db-ja.com

2つのwhileループ内のbreakステートメント

私がこれを持っているとしましょう:

while(a){

  while(b){

   if(b == 10)
     break;
 }
}

質問: breakステートメントは両方のループから抜け出しますか、それとも内側のループからのみ抜け出しますか?ありがとうございました。

16
adrian

あなたの例では、breakステートメントはwhile(b)ループから抜け出します

while(a) {

   while(b) {

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

直近の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");
  }
}
32
Ivan Koblik

内側のものからのみ。特定のループにブレークする場合は、ラベル付きブレークを使用します

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

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

も参照してください

11
Jigar Joshi
while (a) {

   while (b) {

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

上記のコードでは、inner most loop where(ie。immediate loopbreakが使用されます。

両方のループを一度に解除するbreaklabelを使用して、

label1: 
while (a) {

   while (b) {

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

すぐにそれを囲むループから抜け出します。

ただし、ラベルにブレークすることはできます。

myLabel:

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

このパターンはスパゲッティコードに簡単につながるため、一般的にこのパターンを使用するのは好きではありません。ラベルなしのブレークまたはフラグを使用して、ループを終了します。

5
Vivin Paliath

なかむら

Breakキーワードには、CおよびAssemblyから派生したルートがあり、Breakの唯一の目的は、複合ステートメント(ループ、条件、メソッド、またはプロシージャ)から制御を渡すことです。

これらを参照してください...

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

したがって、2つのループから同時に抜け出したい場合は、2つのBreakを使用する必要があります。1つは内側のループに、もう1つは外側のループに使用します。

ただし、両方のループを同時に停止するには、exitまたはreturnを使用する必要があります。

5
Hignesh Hirani

breakステートメントは、そのbreakステートメントを囲む最も内側のループから抜け出します。

この例では、内側のwhileループです。

1
Bhesh Gurung

不思議なことに、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;
  }
}
1
Nelson

Java breakステートメントない)ネストされた複数のループから抜け出します。

0
main--

もちろん内側のループのみ。

0
Debloper

フラグを立てて、外側のwhileループに情報を渡すことができます。この場合、情報は変数breakBothLoopsFlagに格納でき、外側のwhileループはこの情報に従って動作します。以下の擬似コードを参照してください。

int breakBothLoopsFlag = 0;

while(a){

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

   if(breakBothLoopsFlag == 1) {
     break;
   }
}
0
TechJ