繰り返し処理が多重になっている場合

広告

for文やwhile文のブロック内でbreak文が実行されるとブロックを抜けて次の処理へ移りますが、繰り返し処理が多重になっている場合にbreak文が実行された場合にどうなるのかを確認します。

次の例を見てください。

for (int i = 1; i <= 5; i++){
  int sum = 0;
  for (int j = 1; j <= 9; j++){
    if (i * j > 20){
      break;
    }

    System.out.println(i + "*" + j  + "=" + (i * j));
  }

  /* 内側のfor文のブロック内でbreak文が実行されるとここへ処理が移る */
}

/* 外側のfor文のブロック内でbreak文が実行されるとここへ処理が移る */

上記はfor文の中にfor文が記述されています。そして内側のfor文の中にbreak文が記述されています。この場合、for文が実行されると、for文を含んでいる一番内側の繰り返し処理だけを抜けて次の処理へ移ります。その為、break文が実行されたfor文の外にあるfor文の処理の流れには影響を及ぼしません。

今回は2重になったfor文でしたが3重であっても同じことです。またwhile文やdo..while文でも同じです。

サンプル

では簡単な例で試しておきます。

JSample2_1.java

class JSample2_1{
  public static void main(String args[]){

    for (int i = 3; i <= 5; i++){
      int sum = 0;
      System.out.println(i + "の行開始");

      for (int j = 1; j <= 9; j++){
        if (i * j >= 10){
          break;
        }

        System.out.println(i + "*" + j  + "=" + (i * j));
      }

      System.out.println(i + "の行終了");
    }

    System.out.println("計算終了");
  }
}

コンパイル後に実行すると次のように表示されます。

p2-1

break文によって内側の繰り返し処理は途中で処理を終了しますが、外側の繰り返し処理には影響をあたえません。

( Written by Tatsuo Ikura )