SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

即戦力にならないといけない人のためのJava入門

Javaの基本的な演算と制御構文

即戦力にならないといけない人のためのJava入門 第3回

5.5. breakとcontinue

 breakは、for文やwhile文などの繰り返し処理から抜ける場合や、switch文の処理から抜ける場合に使われます。繰り返しの処理の中で「break;」と記述されている箇所に来ると、それ以降の繰り返しの処理は行わず、その繰り返し処理は終了されます。

★★↓CodeZineのWebフォーマットでは、ソースコード部分に図を上乗せする形で説明できないので、コメントとして読み替えてみました(以下同様)★★。

for (int i = 0; i < 3; i++) {
    if (i == 1) {
        break;  // i ==1の場合、for文から抜ける(【A】へ処理が移る)
    }
    System.out.println("i=" + i);
}
……それ以降の処理  // 【A】

 continueもまたfor文やwhile文などの繰り返し処理の中で使われますが、「continue;」と記述されている箇所にくると、それ以降の繰り返しの処理は行わず、次の繰り返し処理を始めます。

for (int i = 0; i < 3;  i++  ) {  // 【B】
    if (i == 1) {
        continue;  // i ==1の場合、次の繰り返し処理を行う(【B】の「i++」へ処理が移る)
    }
    System.out.println("i=" + i);
}

 それではサンプルを実行してみてみましょう

BreakAndContinueSample1.java
package jp.codezine.java.sample03;

/**
 * break文およびcontinue文のサンプルを実行し、その内容を確認するクラス
 */
public class BreakAndContinueSample1 {

    /**
     * break文およびcontinue文を実行し、その内容を確認します。
     * 
     * @param args
     *            コマンドライン引数。今回は使われません。
     */
    public static void main(String[] args) {

        System.out.println("------- [1] break -------");
        for (int i = 0; i < 3; i++) {
            if (i == 1) {
                break;
            }
            System.out.println("i=" + i);
        }

        System.out.println("------- [2] continue -------");
        for (int i = 0; i < 3; i++) {
            if (i == 1) {
                continue;
            }
            System.out.println("i=" + i);
        }
    }
}
実行結果:
------- [1] break -------
i=0
------- [2] continue -------
i=0
i=2

 また、繰り返し構文の中にさらに繰り返し構文がある入れ子の状態の場合、breakもしくはcontinueが影響するのは、それがある繰り返し構文に対して影響します。

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {  // 【C】
        if (j == 1) {
            break;  // 内側のfor文に対してbreakします(【C】へ処理が移る)
        }
        System.out.println("i=" + i + ", j = " + j);
    }
}

for (int i = 0; i < 3; i++) {  // 【D】
    if (i == 1) {
        break;  // 外側のfor文に対してbreakします(【D】へ処理が移る)
    }
    for (int j = 0; j < 3; j++) {
        System.out.println("i=" + i + ", j = " + j);
    }
}

 それではサンプルを実行してみましょう

BreakAndContinueSample2.java
package jp.codezine.java.sample03;

/**
 * break文およびcontinue文のサンプルを実行し、その内容を確認するクラス
 */
public class BreakAndContinueSample2 {

    /**
     * break文およびcontinue文を実行し、その内容を確認します。
     * 
     * @param args
     *            コマンドライン引数。今回は使われません。
     */
    public static void main(String[] args) {

        System.out.println("------- [1] ループが入れ子の場合で内ループでのbreak -------");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 1) {
                    System.out.println("j == 1 のとき break");
                    break;
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }

        System.out.println("------- [2] ループが入れ子の場合で内ループでのcontinue -------");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 1) {
                    System.out.println("j == 1 のとき continue");
                    continue;
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }

        System.out.println("------- [3] ループが入れ子の場合で外ループでのbreak -------");
        for (int i = 0; i < 3; i++) {
            if (i == 1) {
                System.out.println("i == 1 のとき break");
                break;
            }
            for (int j = 0; j < 3; j++) {
                System.out.println("i = " + i + ", j = " + j);
            }
        }

        System.out.println("------- [4] ループが入れ子の場合で外ループでのcontinue -------");
        for (int i = 0; i < 3; i++) {
            if (i == 1) {
                System.out.println("i == 1 のとき continue");
                continue;
            }
            for (int j = 0; j < 3; j++) {
                System.out.println("i = " + i + ", j = " + j);
            }
        }
    }
}
実行結果:
------- [1] ループが入れ子の場合で内ループでのbreak -------
i = 0, j = 0
j == 1 のとき break
i = 1, j = 0
j == 1 のとき break
i = 2, j = 0
j == 1 のとき break
------- [2] ループが入れ子の場合で内ループでのcontinue -------
i = 0, j = 0
j == 1 のとき continue
i = 0, j = 2
i = 1, j = 0
j == 1 のとき continue
i = 1, j = 2
i = 2, j = 0
j == 1 のとき continue
i = 2, j = 2
------- [3] ループが入れ子の場合で外ループでのbreak -------
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i == 1 のとき break
------- [4] ループが入れ子の場合で外ループでのcontinue -------
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i == 1 のとき continue
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2

 また繰り返し構文にラベルを設定することによりbreakやcontinueを指定したラベルに対して行うこともできます。ラベル名に使える文字は識別子と同様で、対象の制御文の前に「ラベル名」+「:」(コロン)の書式で設定します。

label: for (int i = 0; i < 3; i++) {  // 【E】
    for (int j = 0; j < 3; j++) {
        if (j == 1) {
            break label;  // 指定したラベルのfor文に対してbreakします(【E】へ処理が移る)
        }
        System.out.println("i = " + i + ", j = " + j);
    }
}

 それではサンプルを実行してみましょう。

package jp.codezine.java.sample03;

/**
 * break文およびcontinue文のサンプルを実行し、その内容を確認するクラス
 */
public class BreakAndContinueSample3 {

    /**
     * break文およびcontinue文を実行し、その内容を確認します。
     * 
     * @param args
     *            コマンドライン引数。今回は使われません。
     */
    public static void main(String[] args) {
        System.out.println("------- [1] ラベルありループでのbreak -------");
        label: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 1) {
                    System.out.println("j == 1 のとき labelに対してbreak");
                    break label;
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }

        System.out.println("------- [2] ラベルありループでのcontinue -------");
        label: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 1) {
                    System.out.println("j == 1 のとき labelに対してcontinue");
                    continue label;
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }
    }
}
実行結果:
------- [1] ラベルありループでのbreak -------
i = 0, j = 0
j == 1 のとき labelに対してbreak
------- [2] ラベルありループでのcontinue -------
i = 0, j = 0
j == 1 のとき labelに対してcontinue
i = 1, j = 0
j == 1 のとき labelに対してcontinue
i = 2, j = 0
j == 1 のとき labelに対してcontinue

5.6. return文

 メソッド自体の処理を終了させるのに、戻り値が必要な場合はreturn文で戻り値を返し処理を終了させます。メソッドがvoidの場合は終わらせたい箇所で「return;」と記述することで、それ以降の処理を行わないように終了させることができます。また、戻り値がなく、メソッドの処理を途中で終わらせる必要がない場合は、return文は不要です。

最後に

 今回はJavaの主な演算や制御について見てきました。業務アプリの処理も基本的には今まで見てきたものをいろいろと組み合わせて構築されています。後はJavaのクラスやメソッドにどのようなものがあるのか分かるようになれば、ある程度のJavaアプリケーションを作成することは可能かと思います。今回紹介した演算や制御構文の他にもJavaではビット演算やシフト演算などいろいろな演算や制御構文がありますが、一般的な業務アプリで意識して使う機会はあまりありません。一般的な業務アプリで使われる演算や制御の知識は、ここに載せたもので十分かと思います。

参考資料

  1. The Java Tutorials
  2. The Java Language Specification Java SE 8 Edition
  3. Java セキュアコーディングスタンダード CERT/Oracle 版
  4. オラクル認定資格教科書 Javaプログラマ Bronze SE 7』 山本道子 著、翔泳社、2012年12月
  5. オラクル認定資格教科書 Javaプログラマ Silver SE 7』 山本道子 著、翔泳社、2013年1月

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
即戦力にならないといけない人のためのJava入門連載記事一覧

もっと読む

この記事の著者

長谷川 智之(株式会社ビーブレイクシステムズ)(ハセガワ トモユキ)

株式会社ビーブレイクシステムズ 開発部所属。社内サークルの執筆チームに在籍しています。主な執筆は下記になります。・@IT連載『Javaの常識を変えるPlay framework入門』※複数著者での連載 ・日経ソフトウェア連載『コツコツ学ぶAndroidネイティブアプリ開発教室』※複数著者での連載 ・@I...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7840 2015/07/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー