[Java] 3つ以上の条件分岐 if文とswitch文

2017年3月19日(更新: 2017年4月25日)

前回は条件分岐 if文 の基本的な使い方や、その条件となる boolean型 について紹介しました。

今回は、さらに複雑な条件分岐について紹介します。

三つ以上の条件分岐

if文は3つ以上の条件分岐も可能です。書き方の例を以下に示します。

if ( 条件1 ) {
 
    // 条件1を満たした場合の処理
 
} else if ( 条件2 ) {
 
    // 条件1を満たさず、条件2を満たした場合の処理
 
} else if ( 条件3 ) {
 
        .
        .
        .
 
} else if ( 条件n ) {
 
    // 条件nより前の条件を全てを満たさず、条件nを満たした場合の処理
 
} else {
 
    // 全ての条件を満たさなかった場合の処理(省略可)
 
}

else if ( 条件 ) {} は任意の数だけ書くことができます。

この場合も最後の else {} は省略できます。

実際に3つ以上の条件分岐を行うプログラム例を示します。

import java.util.Scanner;

public class Test {
 
    public static void main(String args[]) {
 
        System.out.print("得点を入力してください: ");
 
        Scanner scan = new Scanner(System.in);

        int score = scan.nextInt();

        scan.close();
 
        // 80点以上と60点以上と60点未満の3つで処理を分ける
        if (score > 80) {
            System.out.println("素晴らしい成績です!");
        } else if (score > 60) {
            System.out.println("合格です!");
        } else {
            System.out.println("不合格です");
        }
    }
}

実行結果は以下の通りです。入力した数値によって3つの場合に処理が分岐しています。

if文の例 ひとつ目のブロックが処理された結果

if文の例 ふたつ目のブロックが処理された結果

if文の例 elseのブロックが処理された結果

複数の条件をまとめて処理する

「A または B」や「A かつ B」などの、複数の条件を同時に判定したいときは論理演算子を使います。

論理演算子 論理演算子の意味
&& かつ(論理積)
|| または(論理和)

論理演算子を使用した条件分岐の例を以下に示します。

import java.util.Scanner;

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

        System.out.print("得点を入力してください: ");
      
        Scanner scan = new Scanner(System.in);

        int score = scan.nextInt();

        scan.close();
      
        // score が 60以上 かつ 70未満 の場合
        if (score >= 60 && score < 70) {
            System.out.println("60以上かつ70未満です");
        }

        // score が 0 または 100 の場合
        if (score == 0 || score == 100) {
            System.out.println("満点または0点です");
        }
    }
}

実際に動かして、いろいろな組み合わせを試してみてください。

switch文による条件分岐

Javaで使える条件分岐の文法は if文 の他に switch文 があります。

switch文の場合、指定した変数の値が何と等しいかによって処理を分ける書き方になります。

書き方の例を以下に示します。

switch (変数) {
    case 値1:
        // 変数が値1と等しいときの処理
    break;
    case 値2:
        // 変数が値2と等しいときの処理
    break;
    case 値3:
 
    .
    .
    .
 
    case 値n:
        //  変数が値nと等しいときの処理
    break;
    default:
        // どの値とも等しくなかったときの処理(省略可)
    break;
}

switch の後の括弧内に指定する変数、および case の後に書く値として設定できるのは、int型などの整数値、char型、String型です。

小数点を含むdouble型などは使えません。

switch文を使ったプログラムを作ってみます。入力された数値によってメッセージが変わります。

import java.util.Scanner;

public class Test {

    public static void main(String args[]) {

        System.out.print("何番のボタンを押しますか: ");

        Scanner scan = new Scanner(System.in);

        int number = scan.nextInt();

        scan.close();

        // switch文による条件分岐
        switch (number) {
            case 1:
                System.out.println("1番を押しました!");
                break;
            case 2:
                System.out.println("2番を押しました!");
                break;
            case 3:
                System.out.println("3番を押しました!");
                break;
            case 4:
                System.out.println("4番を押しました!");
                break;
            default:
                System.out.println("その番号のボタンはありません");
                break;
        }
    }
}

switch文の書き方は他の構文とは異なります。caseの後の値は括弧をつけません。

また、処理もブロック({})ではなくコロン(:)の後なので注意してください。

実行結果です。2を入力しました。

switch文による条件分岐のサンプル

処理の最後に書かれている break は、switch文のブロックを終わらせる役目を果たします。

この break を書かないと、別の値のときに行われるはずの処理が実行されてしまいます。

以下のように break をコメントアウトして実際に動かして見てみましょう。

import java.util.Scanner;

public class Test {

    public static void main(String args[]) {

        System.out.print("何番のボタンを押しますか: ");

        Scanner scan = new Scanner(System.in);

        int number = scan.nextInt();

        scan.close();

        // switch文による条件分岐
        switch (number) {
            case 1:
                System.out.println("1番を押しました!");
                break;
            case 2:
                System.out.println("2番を押しました!");
                // break; 無効にする
            case 3:
                System.out.println("3番を押しました!");
                // break; ここも無効にする
            case 4:
                System.out.println("4番を押しました!");
                break;
            default:
                System.out.println("その番号のボタンはありません");
                break;
        }
    }
}

値が1の場合に実行される処理の中には break が含まれているので、case 1: の部分しか実行されません。

switch文でbreakを正しく書いた時

しかし、値が 2 および 3 の場合に実行される処理の中には break が含まれていませんから、break の含まれている case 4: までの全ての処理が実行されてしまいます。

switch文でbreakを書き忘れたときの結果1

switch文でbreakを書き忘れたときの結果2

このように、break を書き忘れると意図しない処理が行われることがあります。

switch文で条件分岐を行うときは、break の書き忘れに注意してください。

コメントを残す

メールアドレスが公開されることはありません。