繰り返しの中断

break文とcontinue文

break

繰り返しの判断は繰り返しブロックの始めか終わりで行うことになっていますが、繰り返しの途中でも判断をして中断させる必要がでてくることがあります。このようなとき、break を使います。

次の例では基本的に x が1000未満のうちは処理を繰り返しますが、if ( y > 2000 ) の箇所で y の値をチェックして、2000よりも大きくなっていたら、すぐに繰り返しを中止して、繰り返しのブロックの後にある処理に進みます。つまり、この例では System.out.println を実行します。

while ( x < 1000 ){
    ‥‥‥‥‥
    ‥‥‥‥‥‥‥‥
    ‥‥‥‥‥‥‥
    ‥‥‥‥‥
    if ( y > 2000 ) break;
    ‥‥‥‥‥‥‥
    ‥‥‥‥‥‥
}
System.out.println( "----------" );

continue

次の例では基本的に i が 1 から 100 まで処理を繰り返しますが、if ( y > 2000 ) の箇所で y の値をチェックして、2000よりも大きくなっていたら、その後の部分をとばして、for のブロックの最後にすすみ、for の続きをします。つまり、この例で i が 32 の時に y が2000より大きければ x = y; のある部分(青い部分)をとばして i を33とし、for の続きをします。

for ( int i=1; i < 100 ; i++ ){
    ‥‥‥‥‥
    ‥‥‥‥‥‥‥‥
    ‥‥‥‥‥‥‥
    ‥‥‥‥‥
    if ( y > 2000 ) continue;
    ‥‥‥‥‥‥‥
    x = y;
    ‥‥‥‥‥‥
}

課題

1.

int[] nums = {85, 95, 84, 71, 37, 48, 64, 99, 29, 86, 64}; などと数を配列に格納しておき、指定された数が最初に見つかるのが何番目の数か表示するプログラムを作ります。

次の例では配列nums[]の数値から指定された数 seachnum=64 を探します。見つかるとbreakでforループを抜けます。

7番目と11番目に64がありまので、breakがないと見つけても続きをやって、11番目と報告してしまいます。

ファイル名 Break1.java

public class Break1 { 
   public static void main( String[] args ) {
      int[] nums = {85, 95, 84, 71, 37, 48, 64, 99, 29, 86, 64};
      int seachnum = 64;
      int found = -1;
      for (int i=0; nums.length>i; i++){
         if (nums[i] == seachnum){
              found = i;
              break;
          }
       }
      if (found == -1){
         System.out.println(seachnum + "はありませんでした。");
       }
      else{
         found++;
         System.out.println(seachnum + "は" + found + "番目にありました。");
       }
   }
}

2.

continue を使わずに 2,3,5,7のどれでも割り切れない数を報告するプログラムを作りなさい。

割り切れないのは余りを計算する % で判定します。

amari = 24 % 3  //amariは0になります。
amari = 24 % 5  //amariは4になります。
if (num % 3 == 0) {  //numが3で割りきれるとき ( == は等しいことを調べる演算子)
if (num % 3 != 0) {  //numが3で割りきれないとき ( != は等しくないという演算子)
if (num % 3 >  0) {  //これもnumが3で割りきれないとき ( 0 より大きければ 0 ではない)

2で割れないもののうち、3で割れないものを求め、さらにそのなかで5で割れない...となるので次のようなプログラムになります。

ファイル名 Cont1.java

public class Cont1 { 
   public static void main( String[] args ) {
      int[] nums = {85, 95, 84, 71, 37, 48, 64, 99, 29, 86, 64};
      int ct = 0; 
      for (int i=0; nums.length>i; i++){
         if (nums[i] % 2 != 0){
            if (nums[i] % 3 != 0){
               if (nums[i] % 5 != 0){
                  if (nums[i] % 7 != 0){
                     System.out.println(nums[i] + "は割れません。");
                     ct++;
                     }
                 }
              }
          }
       }
      System.out.println("割れない数は" + ct + "個見つかりました。");
   }
}

結果は次の様になります。

$ java Cont1
71は割れません。
37は割れません。
29は割れません。
割れない数は3個見つかりました。

3.

continue を使って 2,3,5,7のどれでも割り切れない数を報告するプログラムを作りなさい。

continueを使うと次の様にすっきりと書くことができます。

ファイル名 Cont2.java

public class Cont2 { 
   public static void main( String[] args ) {
      int[] nums = {85, 95, 84, 71, 37, 48, 64, 99, 29, 86, 64};
      int ct = 0; 
      for (int i=0; nums.length>i; i++){
         if (nums[i] % 2 == 0) continue;
         if (nums[i] % 3 == 0) continue;
         if (nums[i] % 5 == 0) continue;
         if (nums[i] % 7 == 0) continue;
         System.out.println(nums[i] + "は割れません。");
         ct++;
       }
      System.out.println("割れない数は" + ct + "個見つかりました。");
   }
}

Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Jun.2011