[PR] 迷惑メール トップページプロ3ゼミJavaJava入門講座一学期単位4 →4時間目

4時間目 柔軟に繰り返す

 単位4では繰り返し及び配列について学んできました。
繰り返す文はfor文、while文及びdo〜while文(以降この3つをループとする)がありますが、ループはただ単に 繰り返すだけでif文などを使って終了させることはできません。
if文などを使っても無駄な繰り返しが発生します。
又、処理を繰り返す場合に今回の回は処理を続けても意味が無い場合どうするかも説明します。
ループを抜ける文をbreak文、今回の処理を実行しない文をcontinue文を使う事によって実現できます。

4−4−1.ループを途中で抜ける(break文)

 ループでこれ以上繰り返しに意味が無い場合にはどうすれば良いのでしょうか。
そんな時は、break文を使います。
break文を使うと記述した文のループから処理を抜け出します。
抜け出すとは、本来終了条件に成らなければループから抜け出せませんが、break文を実行する事によりルー プを終わらせる事ができます。
プログラムを見た方が分かり易いでしょう。
Sample4_4_1.java
public class Sample4_4_1 {

    public static void main(String[] args) {

        new Break().view();
    }
}

class Break {

    public void view() {

        for (int i = 0; i < 10; i++) {
            if (i == 3) {
                // iが3ならfor文を抜ける
                break;
            }
            System.out.print(i + " ");
        }
        System.out.println();

        int[] array = { 10, 20, 30, 1 };    // 年齢データを用意
        int sum = 0;                        // 年齢の合計
        int number;                         // 人数
        // 年齢の平均を求める
        for (number = 0; number < array.length; number++) {
            System.out.print(array[number] + " ");
            if (array[number] < 0) {
                // 存在しない年齢
                break;
            }
            sum += array[number];
        }
        if (number >= array.length) {
            double avg = (double) sum / array.length;           // 年齢の平均
            System.out.println("年齢の平均は" + avg + "です。");
        } else {
            System.out.println("不正なデータが入力されています。");
        }
    }
}
0 1 2 
10 20 30 1 年齢の平均は15.25です。

 最初は、iが3になったらfor文を抜ける処理です。

 次は、年齢の平均を求めるプログラムです。
年齢は0歳以上ではないとおかしいのでおかしい年齢が有る場合はfor文の処理から抜けます。
年齢が0歳未満が終了条件ではない為、if文で判定しbreak文でfor文の処理から抜けます。
ループで終了条件に論理演算子を駆使すれば終了条件とすることもできます。
これはプログラミングするプログラマのスタイル又はチーム等のコード・スタイルに基づいて記述する事が多 いでしょう。
練習する上では、いろいろと試してみる事です。

 年齢の平均では小数が出る事もある為、double型の変数に結果を格納します。
注意しなければならないのが、sum及びarray.lengthはint型である為、整数同士の計算になり結果も整数で 格納されます。
その為、sum又はarray.lengthを一度double型に変換して計算を行う必要があります。
このようにある型を違う型に変換する事をキャストと言います。
すべてをキャストできるわけでは有りませんが、変数の所で教えた通り、型はそれに必要なデータのみを格納 できるのです。
よって、sumを初めからdouble型で宣言するよりも年齢の平均を求める時にキャストした方が効率がいい訳で す。

4−4−2.ループの文を飛ばす

 ループでこの処理の時だけはこれ以上下の文を実行する必要が無く、次に行ってい欲しい場合があります。
そんな時は、continue文を使います。
では、サンプルプログラム(Sample4_4_2.java)をご覧下さい。
Sample4_4_2.java
public class Sample4_4_2 {

    public static void main(String[] args) {

        new Continue().view();
    }
}

class Continue {

    public void view() {

        for (int i = 0; i < 10; i++) {
            if (i == 3) {
                // iが3なら以降の分を飛ばす
                continue;
            }
            System.out.print(i + " ");
        }
        System.out.println();

        // 年齢データを用意
        int[] array = {
            10, 20, -1, 30, 1
        };                  
        int sum = 0;                        // 年齢の合計
        int number = 0;                     // 人数
        // 年齢の平均を求める
        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                // 存在しない年齢
                continue;
            }
            sum += array[i];
            number++;                                           // 人数を数える
            System.out.print(array[i] + " ");
        }
        if (number > 0) {
            // 1以上いれば年齢の平均を求める
            double avg = (double) sum / number;                 // 年齢の平均
            System.out.println("年齢の平均は" + avg + "です。");
        }
    }
}
0 1 2 4 5 6 7 8 9 
10 20 30 1 年齢の平均は15.25です。

 continue文の場合はループを抜けない為、それ以降の文を実行する必要が無い時に使用します。
よって、サンプルプログラムの年齢の平均を求めるプログラムは、存在しない年齢を無視しする事により (continue文を実行)合計に足される事なくループを継続できます。

3時間目 while文及びdo〜while文に戻る     5時間目 繰り返しと配列のまとめに進む

単位4 処理を繰り返すにはに戻る

トップページに戻る