switch文

スポンサーリンク
アイキャッチjava All

switch文とは

Javaのswitch文とは、プログラミングにおいて条件分岐を行うための構文の一つです。

例えば、ある変数に格納された値に応じて、処理を分けたい場合に使うことができます。

たとえば、日にちを表す変数があった場合、その変数の値によって、曜日を処理を分けることができます。

Javaのswitch文は、次のような形式で書かれます。

具体例

1~7の整数を入力すると、その数字に応じて曜日を表示するプログラムの場合、以下のようにfor文を書くことができます。

※構文は下で説明しますのでざっくりみてください。

public class Sample {
    public static void main(String[] args) {
        int day = 5;
        switch(day){
          case 1:
            System.out.println("月曜日");
            break;
          case 2:
            System.out.println("火曜日");
            break;
          case 3:
            System.out.println("水曜日");
            break;
          case 4:
            System.out.println("木曜日");
            break;
          case 5:
            System.out.println("金曜日"); //dayに5が代入されているため、case 5が該当し、"金曜日"と表示
            break;
          case 6:
            System.out.println("土曜日");
            break;
          case 7:
            System.out.println("日曜日");
            break;
          default:
            System.out.println("1~7の整数を入力してください");
        }
    }
}

switch文の基本的な書き方

switch文の基本的な書き方は、以下のようになります。

switch文の基本構文
switch(変数) {
    case 値1:
        // 変数と値1に一致した場合の処理
        break; // switch文の終了
    case 値2:
        // 変数と値2に一致した場合の処理
        break; // switch文の終了
    case 値3:
        // 変数と値3に一致した場合の処理
        break; // switch文の終了
    // ...
    default:
        // 変数がいずれにも一致しなかった場合の処理
        break; // switch文の終了
}

switch文の処理の流れ

  1. 変数の値を評価する。
  2. 変数と値が一致するcase文があればその中の処理を実行する。
  3. case内にbreak文があればswitch文を終了する。
  4. case内にbreak文がなければ条件に合致するcase文から下に続く全ての処理が実行されます。
  5. 該当するcase文がない場合は、default文があればその中の処理を実行する。
  6. default文がない場合は、処理を終了する。

switch文を使用する例

ある整数型の変数dayに1~7の数字を代入することで、その数字に応じて曜日を出力するプログラムを作成します。

public class Sample {
    public static void main(String[] args) {
        int day = 5;
        switch(day){
          case 1:
            System.out.println("月曜日");
            break;
          case 2:
            System.out.println("火曜日");
            break;
          case 3:
            System.out.println("水曜日");
            break;
          case 4:
            System.out.println("木曜日");
            break;
          case 5:
            System.out.println("金曜日"); //dayに5が代入されているため、case 5が該当し、"金曜日"と表示
            break;
          case 6:
            System.out.println("土曜日");
            break;
          case 7:
            System.out.println("日曜日");
            break;
          default:
            System.out.println("1~7の整数を入力してください");
        }
    }
}
  1. 最初の行では、整数型の変数dayを宣言しています。変数dayには、この後のコードで1~7の数字が代入されます。
  2. 次に、switch文では、まず変数dayの値に応じて、該当するcase文が実行されます。今回は5が代入されているのでcase 5の処理が実行されます。
  3. “金曜日”を出力したのち、break文によりswitch文を終了します。

ここでは、変数dayの値に応じて、以下のように出力されます。

  • dayが1の場合:"月曜日"と出力
  • dayが2の場合:"火曜日"と出力
  • dayが3の場合:"水曜日"と出力
  • dayが4の場合:"木曜日"と出力
  • dayが5の場合:"金曜日"と出力
  • dayが6の場合:"土曜日"と出力
  • dayが7の場合:"日曜日"と出力
  • 上記以外の場合:"1~7の整数を入力してください"と出力

switch文の特徴

型による制限

条件には整数型の値と文字列型の値しか使えないため、型による制限があります。

switch文では、比較する値の型は以下の5つのいずれかでなければなりません。

比較する値の型
  • byte
  • short
  • char
  • int
  • String

switch文での比較は、値が等しいかどうかを判断するため、整数型、文字列でなければ正しく判断できないためです。

break文

Javaのswitch文では、case文の処理が終了したら必ずbreak文を書く必要があります。

break文が使用されない場合次のcase文の処理も実行されてしまいます

例えば、以下のようなswitch文がある場合を考えてみましょう。

public class Sample {
    public static void main(String[] args) {
        int day = 3;
        switch(day){
          case 1:
            System.out.println("月曜日");
          case 2:
            System.out.println("火曜日");
          case 3:
            System.out.println("水曜日");
          case 4:
            System.out.println("木曜日");
          case 5:
            System.out.println("金曜日");
          case 6:
            System.out.println("土曜日");
          case 7:
            System.out.println("日曜日");
        }
    }
}

このswitch文では、dayの値が3であるため、case 3が条件に合致し、”水曜日”が出力されます。

しかし、break文が使用されていないため、その後のcase文も全て実行されます。

つまり、以下のように出力されます。

水曜日
木曜日
金曜日
土曜日
日曜日

そのため、switch文内の各caseブロックにはbreak文を記述し、現在のcase文の処理を終了し、switch文から抜け出すようにします。

default文

default文は、switch文においてどのcase文にも一致しなかった場合に、最後に実行される処理を指定するための文です。

default文は、if-else文でいうelse文に相当します。

例えば、以下の例のように変数dayの値が8の時はどのcaseにも一致しないのでdefault文の処理が実行されます。

public class Sample {
    public static void main(String[] args) {
        int day = 8;
        switch(day){
          case 1:
            System.out.println("月曜日");
          case 2:
            System.out.println("火曜日");
          case 3:
            System.out.println("水曜日");
          case 4:
            System.out.println("木曜日");
          case 5:
            System.out.println("金曜日");
          case 6:
            System.out.println("土曜日");
          case 7:
            System.out.println("日曜日");
        }
    }
}

default文はそれ以外の処理が不要な場合は省略可能ですが、どのcase文にも一致しない場合に実行される処理を指定することで、プログラムの安全性を高めることができます。

switch文と if-else文の違い

Javaには、ある条件に応じて処理を分岐させるための分岐文が用意されています。

代表的なものに「if-else文」「switch文」があります。

switch文とif-else文の概要

【if-else文】

条件式が成り立つかどうかで分岐します。

条件式がtrueの場合にはifブロック内の処理が実行され、falseの場合にはelseブロック内の処理が実行されます。

if-else文は、条件式が多岐にわたる場合や、条件が複雑な場合に適しています。

【switch文】

ある変数に対して、いくつかの値がある場合に、それぞれの値に応じた処理を行います。

switch文では、変数の値によって分岐するため、if-else文に比べてシンプルな書き方ができます。

条件式の違い

if-else文switch文の最も大きな違いは、条件式の書き方です。

if-else文】

条件式にはtrueまたはfalseと評価される式が入ります。

つまり、条件式の結果がtrueの場合、ifブロックが実行され、falseの場合はelseブロックが実行されます。

【switch文】

条件式には変数や式が入ります。

そして、その変数や式がどのcaseブロックに合致するかによって、実行されるブロックが決まります。

扱えるデータ型の違い

if-else文switch文の扱えるデータ型にも違いがあります。

if-else文】

すべてのデータ型を扱うことができます。

【switch文】

条件式にintbyteshortcharString型のいずれかのデータ型を指定する必要があります。

複数の条件を扱う場合の違い

if-else文では、複数の条件を扱うために、else if文を使用することができます。

一方、switch文では、caseブロックを複数指定することができます。

例えば、以下のコードでは、if-else文を使用しています。

if-else文】

public class Sample {
    public static void main(String[] args) {
        int number = 2;
        if(number == 1){
            System.out.println("1です");
        }else if(number == 2){
            System.out.println("2です");
        }else{
            System.out.println("1でも2でもありません");
        }
    }
}

これをswitch文で書き換えると、以下のようになります。

【switch文】

public class Sample {
    public static void main(String[] args) {
        int number = 2;
        switch(number){
            case 1:
                System.out.println("1です");
                break;
            case 2:
                System.out.println("2です");
                break;
            default:
                System.out.println("1でも2でもありません");
                break;
        }
    }
}

実際のプログラムにおける使い分けの例

実際のプログラムにおけるswitch文とif-else文の使い分けについて考えてみましょう。

以下に、具体的な使い分けの例をいくつか紹介します。

まず、switch文は、if-else文と比べて、条件分岐の数が限られている場合に適しています。

例えば、メニュー画面などでユーザーが選択した項目によって処理を分岐する場合などがこれに当たります。

public class Sample {
    public static void main(String[] args) {
        int num = 3;
        switch (num) {
            case 1:
                System.out.println("1が選択されました。");
                break;
            case 2:
                System.out.println("2が選択されました。");
                break;
            case 3:
                System.out.println("3が選択されました。");
                break;
            default:
                System.out.println("1〜3の数字を入力してください。");
                break;
        }
    }
}

上記の例では、変数numに格納された値によって、処理を分岐しています。

numが1の場合は、「1が選択されました。」と出力され、numが2の場合は、「2が選択されました。」と出力されます。

numが3の場合は、「3が選択されました。」と出力され、それ以外の場合は、「1〜3の数字を入力してください。」と出力されます。

一方、if-else文は、条件分岐の数が多い場合や、条件式が複雑な場合に適しています。

以下は、条件式が複雑な場合の例です。

public class Sample {
    public static void main(String[] args) {
        int num = 3;
        if (num > 0 && num < 4) {
            System.out.println(num + "が選択されました。");
        } else {
            System.out.println("1〜3の数字を入力してください。");
        }
    }
}

上記の例では、if文の条件式に、numが1以上かつ4未満であることを指定しています。

そのため、numが1から3の場合は、「〇が選択されました。」と出力され、それ以外の場合は、「1〜3の数字を入力してください。」と出力されます。

また、複数の条件式を組み合わせたい場合は、if-else文を使用します。以下は、条件式を組み合わせた例です。

public class Sample {
    public static void main(String[] args) {
        int num = 3;
        if (num == 1 || num == 2) {
            System.out.println("1または2が選択されました。");
        } else if (num == 3 || num == 4) {
            System.out.println("3または4が選択されました。");
        } else {
            System.out.println("1〜4の数字を入力してください。");
        }
    }
}

以上のように、Javaの分岐処理には、条件式に応じてif-else文を用いた分岐処理と、変数の値に応じてswitch文を用いた分岐処理があります。

それぞれの使い方や特徴を理解し、プログラムに適した分岐文を選択しましょう。

コメント

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