Javaにはgoto文がないことは前述しました。では、多重ループから抜けるのは
フラグを利用するなどかっこわるい書き方しかないのでしょうか?
class Test{
public static void main(String args[]){
boolean bContinue = true;
for( int i = 0 ; i < 10 && bContinue ; i++ ){
for( int j = 0 ; j < 10 ; j++ ){
System.out.println("i=" + i + " j=" + j );
if( i == 5 && j == 5 ){
bContinue = false;
break;
}
}
}
}
}
|
上記の例では、処理が少ないので、これでもすっきりして見えますが、処理が複雑になると、上述のように
1つめのfor文の条件にフラグ判定を入れるのではなく、入れ子になっているfor文が終わった場所にif文で
さらに条件分岐が必要になる場合もあります。
class Test{
public static void main(String args[]){
boolean bContinue = true;
for( int i = 0 ; i < 10 && bContinue ; i++ ){
for( int j = 0 ; j < 10 ; j++ ){
System.out.println("i=" + i + " j=" + j );
if( i == 5 && j == 5 ){
bContinue = false;
break;
}
}
if( !bContinue )
break;
}
}
}
|
これでもまだ余分な処理が書かれていないのでいいですが、これが実際にプログラムになると他にも
いろいろ入ってきますので、こうなってくるとソースを見にくくてしょうがありません。
実はJavaではforやwhileといった反復構造のみにラベルを使用することができ、break文でどのループを
抜け出すか指定ができるのです。
class Test{
public static void main(String args[]){
LOOP1:
for( int i = 0 ; i < 10 ; i++ ){
for( int j = 0 ; j < 10 ; j++ ){
System.out.println("i=" + i + " j=" + j );
if( i == 5 && j == 5 ){
break LOOP1;
}
}
}
}
}
|
これでだいぶすっきりしましたね。