私がこれを持っているとしましょう:
while(a){
while(b){
if(b == 10)
break;
}
}
質問: breakステートメントは両方のループから抜け出しますか、それとも内側のループからのみ抜け出しますか?ありがとうございました。
あなたの例では、breakステートメントはwhile(b)ループから抜け出します
while(a) {
while(b) {
if(b == 10) {
break;
}
}
// break will take you here.
}
直近の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");
}
}
内側のものからのみ。特定のループにブレークする場合は、ラベル付きブレークを使用します
label1:
for(){
label2:
for(){
if(condition1)
break label1;//break outerloop
if(condition2)
break label2;//break innerloop
}
}
も参照してください
while (a) {
while (b) {
if (b == 10) {
break;
}
}
}
上記のコードでは、inner most loop where(ie。immediate loop
)break
が使用されます。
両方のループを一度に解除するbreak
とlabel
を使用して、
label1:
while (a) {
while (b) {
if (b == 10) {
break label1;
}
}
}
すぐにそれを囲むループから抜け出します。
ただし、ラベルにブレークすることはできます。
myLabel:
while(a) {
while(b) {
if(b == 10)
break myLabel;
}
}
このパターンはスパゲッティコードに簡単につながるため、一般的にこのパターンを使用するのは好きではありません。ラベルなしのブレークまたはフラグを使用して、ループを終了します。
なかむら
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を使用する必要があります。
break
ステートメントは、そのbreak
ステートメントを囲む最も内側のループから抜け出します。
この例では、内側のwhileループです。
不思議なことに、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;
}
}
Java breakステートメントない)ネストされた複数のループから抜け出します。
もちろん内側のループのみ。
フラグを立てて、外側のwhileループに情報を渡すことができます。この場合、情報は変数breakBothLoopsFlagに格納でき、外側のwhileループはこの情報に従って動作します。以下の擬似コードを参照してください。
int breakBothLoopsFlag = 0;
while(a){
while(b){
if(b == 10) {
breakBothLoopsFlag = 1;
break;
}
}
if(breakBothLoopsFlag == 1) {
break;
}
}