【Java入門講座】6章.条件分岐(if・else if・switch)

Java入門レッスン

☜前の章へ 文字列Stringの基本と比較方法まで
☞次の章へ for文で繰り返し処理や無限ループをする方法


【Java入門講座】は全10章から構成される、初心者向けのJava学習コンテンツです。1章から10章まで学習して頂くことでJavaの基礎を学習することができます。

この記事で分かること
  1. 条件分岐とは
  2. if文で条件分岐する方法
  3. else ifで条件分岐する方法
  4. switch文で条件分岐する方法
  5. 関係演算子の使い方
  6. 論理演算子の使い方
  7. ネストについて

条件分岐とは、例えば条件Aを設定して、その条件に当てはまるのであれば、処理Xを実行して、そうでなければ処理Yを実行するといった様に、条件によって処理を変えるものです。

Javaの条件分岐とは

条件分岐とは
  • 条件分岐とは、条件に当てはまっているか、当てはまっていないかで、その後の処理を分岐させる処理のこと

例えば、どのような条件があるのかを考えてみます。

年齢制限のあるアプリがあるとします。年齢制限をするためには、年齢を条件にする必要があります。
この時の条件として考えられる例として以下のものがあります。

  • 20歳以上ならば使用可能
  • 20歳未満なら使用不可能

20歳以上なら条件に当てはまることになります。

条件に当てはまることを、「真」や「true」と言います
条件に当てはまらないことを、「偽」や「false」と言います

会話での使い方は以下の通りです。
「この条件はtrueだよね」

先ほどの条件以外にも、特定の年齢の人だけが使用できるようにする条件も指定できます。

  • 20歳のみ使用可能

プログラミングではこのように条件を指定して、その後の処理を分岐させていきます。

Javaのif文で条件分岐をする方法

※上記の青い文字から読みたい項目へ移動することができます

Javaのif文の基本的な書き方

if文の書き方
  • if(条件式) {処理文} else {処理文}

まずは、Javaで条件分岐をどのように行うのかをサンプルのソースコードで確認してみましょう。

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

        int num = 5;

        if(num == 5) {
            System.out.printf("numは%dです。", num);
        } else {
            System.out.printf("numは5ではありません。");
        }

    }
}

出力結果

numは5です。

このif文はnumが5の場合(真/true)、「numは5です。」と表示し、numが5ではない場合(偽/false)、「numは5ではありません。」と表示するようになっています。

以下のソースコードが条件式です。

if(num == 5)

「もし変数numが5ならば」という条件になっています。

=(イコール)が2つ連続で書かれており、「==」となっています。
これは「等しい」という意味になります。

elseは「条件に当てはまらないならば」という意味です。
elseの後に条件に当てはまらなかった場合の処理を書きます。elseは省略可能です。

Javaの関係演算子の使い方

先ほど「==」この記号は等しいを意味すると解説しました。
この記号は関係演算子と言います。

他の条件を指定したい場合は、他の関係演算子を使う必要があります。

関係演算子とその使い方を見ていきましょう。

関係演算子

演算子記述例意味
==a == baとbは等しい
!=a != baとbは等しくない
a > baはbより大きい
>=a >= baはb以上
a < baより小さい
<=a <= baはb以下
表:関係演算子

実際の使い方を見ていきましょう。

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

        int num = 5;

        if (num == 5) {
            System.out.print("numと5は等しいです。\n");
        }

        if (num != 3) {
            System.out.printf("numと3は等しくないです。\n");
        }

        if (num > 4) {
            System.out.printf("numは4より大きいです。\n");
        }

        if (num >= 5) {
            System.out.printf("numは5以上です。\n");
        }

        if (num < 6) {
            System.out.printf("numは6より小さいです。\n");
        }

        if (num <= 5) {
            System.out.printf("numは5以下です。\n");
        }

    }
}

出力結果

各関係演算子の出力結果

この様に、関係演算子を使うことで、値を比較し、条件分岐を行うことができます。

Javaの論理演算子の使い方

続いて、論理演算子を見ていきましょう。
これまでは、条件は1つだけでしたが、複数の条件を指定したい場合と条件を反転させたい場合に論理演算子を使います

例えば、変数a、b、cがあった場合のことを考えてみます。
「aはbと等しいかつaはcとも等しい」という条件が作れそうです。

この「かつ」に当たる部分を論理演算子で表します。

論理演算子

演算子概要記述例意味
&&かつ(AND)a == b && a == caとbは等しく、aとcも等しい場合、条件に合致
||または(OR)a == b || a == caとb、aとc、どちらか1つでも等しい場合、条件に合致
!でない(NOT)!(a == b)aとbが等しいという条件を反転させた条件(aとbは等しくない)に合致
表:論理演算子

実際の使い方を見てみましょう。

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

        int a = 5;
        int b = 5;
        int c = 5;

        if (a == b && a == c) {
            System.out.printf("aとbは等しく、aとcも等しいです。\n");
        }

        if (a == b || a == 3) {
            System.out.printf("aはbと等しい、またはaは3です。\n");
        }

        if (!(a == 3)) {
            System.out.printf("aは3ではありません。\n");
        }

    }
}

出力結果

論理演算子の出力結果

「if (!(a == 3))」という条件式は、a==3という条件を反転させるため、aが3ではない場合trueという意味になります。

この様に、論理演算子を使うことで、複数の条件を指定したり、条件を反転させることができます。

Javaのelse ifで条件分岐をする方法

これまで学んだif文は条件が1つ判定されるだけでしたが、else ifを使うことでさらに条件を何個でも追加することができます。

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

        int num = 5;

        if(num == 6) {
            System.out.printf("numは6です。\n");
        } else if(num == 7) {
            System.out.printf("numは7です。\n");
        } else if(num == 5) {
            System.out.printf("numは5です。\n");
        }

    }
}

出力結果

numは5です。

処理の動きは次の通りです。

numが6に等しいという条件に合致しませんでした。
次のnumが7に等しいという条件にも合致しませんでした。
次のnumが5に等しいという条件に合致したので「numは5です。」と表示されました。

このようにelse ifを使えば、条件を追加することが出来ます。

Javaのネスト(入れ子)をする方法

これまでの条件分岐では、1つの条件に合致したら処理が終了していました

しかし、条件の中に条件を入れることで複数の処理を行うことができます。

これをネスト(入れ子)と言います。

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

        int num = 5;

        if (num == 5) {
            System.out.printf("numは5です。\n");
            if (num == 6) {
                System.out.printf("numは6です。\n");
            } else {
                System.out.printf("numは6ではありません。\n");
            }
        }

    }
}

出力結果

numは5です。numは6ではありません。

このようにネストでは、条件の中に条件を追加することができます。

Javaのswitch文で条件分岐をする方法

switch文は、ある変数と複数の値を比較したい場合に使われます。

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

        int num = 5;
        
        switch (num) {
            case 2:
                System.out.printf("numは2です。\n");
                break;
            case 5:
                System.out.printf("numは5です。\n");
                break;
            default:
                System.out.printf("不正な値です。\n");
        }

    }
}

出力結果

numは5です。

この場合は、numが2と5と比較されます。
「case 2」は「numが2の場合」という意味になります。

numは5なので、出力結果は「numは5です。」となりました。

switch(num)と書かれている括弧の中には、条件式を書くこともできます。
例えば、(num – 3) と書いた場合、「numは2です。」と表示されます。

defaultには、どのケースにも当てはまらなかった場合の処理を書きます。

breakをかき忘れると、後続する処理も実行されてしまうので注意して下さい。


練習問題

  • キーボードから年齢を入力
  • 18歳未満の場合、「未成年です。」と表示   
  • 18歳以上の場合、「成人です。」と表示
import java.util.Scanner;

public class AgeChecker {
    public static void main(String[] args) {
        // キーボードから年齢を入力
        Scanner scanner = new Scanner(System.in);
        System.out.print("年齢を入力してください: ");
        int age = scanner.nextInt();

        // 年齢に応じてメッセージを表示
        if (age < 18) {
            System.out.println("未成年です。");
        } else {
            System.out.println("成人です。");
        }

        // スキャナを閉じる
        scanner.close();
    }
}
  • キーボードから0から100の整数を2回入力
  • 入力値が5かつ55の場合「大当たり!」と表示
  • 入力値が15または25または100の場合「当たり!」と表示
  • それ以外は「ハズレ!」と表示
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        // キーボードから2回整数を入力
        Scanner scanner = new Scanner(System.in);

        System.out.print("0から100までの整数を入力してください(1回目): ");
        int input1 = scanner.nextInt();

        System.out.print("0から100までの整数を入力してください(2回目): ");
        int input2 = scanner.nextInt();

        // 条件に応じてメッセージを表示
        if ((input1 == 5 && input2 == 55) || (input1 == 55 && input2 == 5)) {
            System.out.println("大当たり!");
        } else if (input1 == 15 || input1 == 25 || input1 == 100 || input2 == 15 || input2 == 25 || input2 == 100) {
            System.out.println("当たり!");
        } else {
            System.out.println("ハズレ!");
        }

        // スキャナを閉じる
        scanner.close();
    }
}
  • キーボードからLまたはRを入力
  • 入力値がLの場合、再度キーボードからLまたはRを入力
  • 入力値がRの場合、「残念、行き止まりです・・・」と表示
  • 2回目の入力値がLの場合、「おめでとうございます!ゴールです!」と表示
  • 入力値がRの場合、「残念、行き止まりです・・・」と表示
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("LまたはRを入力してください: ");
        char firstInput = scanner.next().charAt(0);

        if (firstInput == 'L') {
            System.out.print("LまたはRを入力してください: ");
            char secondInput = scanner.next().charAt(0);

            if (secondInput == 'L') {
                System.out.println("おめでとうございます!ゴールです!");
            } else if (secondInput == 'R') {
                System.out.println("残念、行き止まりです・・・");
            } else {
                System.out.println("入力が無効です。");
            }
        } else if (firstInput == 'R') {
            System.out.println("残念、行き止まりです・・・");
        } else {
            System.out.println("入力が無効です。");
        }

        scanner.close();
    }
}

☜前の章へ 文字列Stringの基本と比較方法まで
☞次の章へ for文で繰り返し処理や無限ループをする方法

タイトルとURLをコピーしました