break文とcontinue文

<本章の目的> break 文と continue 文を習得する。C言語、C++言語とちょっと違います。

問題7-4 多重ループを一気に抜けるプログラムを作って下さい。

○答え

public class BreakOuter{
  public static void main(String[] args){
    for(int i=0;i<3;i++){
      outer:
      for(int j=0;j<3;j++){
        for(int k=0;k<3;k++){
          if(k>1){
            break outer;
          }
          System.out.println("i="+i+" j="+j+" k="+k);
        }
      }
      System.out.println("break outer");
    }
  }
}


○実行結果

D:\atsushi\Java\p172>java BreakOuter
i=0 j=0 k=0
i=0 j=0 k=1
break outer
i=1 j=0 k=0
i=1 j=0 k=1
break outer
i=2 j=0 k=0
i=2 j=0 k=1
break outer
-- Press any key to exit (Input "c" to continue) --

○解説

一重ループを抜けるには、break 文を使います。
多重ループを抜けるには、ラベル付き break 文を使います。
ラベルはラベル付けするループの直前に書きます。
もしラベルの直後にループがない場合はコンパイルエラーになります。
また、ラベルの名前は好きに決められます。
答えではラベルの名前は outer としました。
いま、break outer が実行されると、
ラベル付けした for(int j=0;j<3;j++) ループを抜けて、
System.out.println("break outer"); まで飛びます。

○補足

Java言語に goto 文はありません。

問題7-5 多重ループの繰り返しを次に進めるプログラムを作って下さい。

○答え

public class ContinueOuter{
  public static void main(String[] args){
    for(int i=0;i<3;i++){
      outer:
      for(int j=0;j<3;j++){
        System.out.println("continue outer");
        for(int k=0;k<3;k++){
          if(k>1){
            continue outer;
          }
          System.out.println("i="+i+" j="+j+" k="+k);
        }
      }
    }
  }
}


○実行結果

D:\atsushi\Java\p173>java ContinueOuter
continue outer
i=0 j=0 k=0
i=0 j=0 k=1
continue outer
i=0 j=1 k=0
i=0 j=1 k=1
continue outer
i=0 j=2 k=0
i=0 j=2 k=1
continue outer
i=1 j=0 k=0
i=1 j=0 k=1
continue outer
i=1 j=1 k=0
i=1 j=1 k=1
continue outer
i=1 j=2 k=0
i=1 j=2 k=1
continue outer
i=2 j=0 k=0
i=2 j=0 k=1
continue outer
i=2 j=1 k=0
i=2 j=1 k=1
continue outer
i=2 j=2 k=0
i=2 j=2 k=1
-- Press any key to exit (Input "c" to continue) --

○解説

一重ループの繰り返しを次に進めるには、continue 文を使います。
多重ループの繰り返しを次に進めるには、ラベル付き continue 文を使います。
答えで、continue outer が実行されると、以降の処理を中断し、
ラベル付けした for(int j=0;j<3;j++) まで飛んで、j++ が実行されます。


戻る / ホーム