1

この記事の目次



1.  switch文による分岐


 ●  if文からswitch文へ

if(条件値 = 値1){
    処理1
}else if(条件値 = 値2){
    処理2
}else if(条件値 = 値3){
    .
    .
    .
}else{
}

上のようなif-else文がよく見かけるかと思います。そのコードには条件が3つ以上含まれ、そのいずれも「条件値 = 値」担っていることに注目してください。このように同じ変数に対sて繰り返し比較を行っている場合はif文をよりスマートな下のswitch文に書き換えることができます。

 ●  switch文の構文

switch(条件値){
    case 値1:
        処理1
        break;
    case 値2:
        処理2
        break;
        .
        .
        .
    default
        処理X
}
  • まずswitchの条件値に応じて対応するcaseラベルから下を実行します。
  • もし対応するcaseラベルがない場合にはdefaultラベルから下を実行しますが、defaultラベルがない場合には何も実行せずにswitch文の実行を終了します。
  • caseラベルは幾つでも書くことができますが、defaultラベルは1つしか書けません。
  •  ●  例題

    問題:自分の好きの月を入力して、その月に何日まであるか確認するプログラムを作成する。

    解答例
    package helloworld;
    
    import java.util.Scanner; //Scannerクラスのimport
     
    public class HelloWorld {
         
        public static void main(String[] args) {
            int month;
            Scanner scanner = new Scanner(System.in);
             
            System.out.print("あなたは何月が好きですか:");
            month = scanner.nextInt();
             
            switch (month) {
                case 1:
                    System.out.println(month + "月は31日までです");
                    break;
                case 2:
                    System.out.println(month + "月は28日までです");
                    break;
                case 3:
                    System.out.println(month + "月は31日までです");
                    break;
                case 4:
                    System.out.println(month + "月は30日までです");
                    break;
                case 5:
                    System.out.println(month + "月は31日までです");
                    break;
                case 6:
                    System.out.println(month + "月は30日までです");
                    break;
                case 7:
                    System.out.println(month + "月は31日までです");
                    break;
                case 8:
                    System.out.println(month + "月は31日までです");
                    break;
                case 9:
                    System.out.println(month + "月は30日までです");
                    break;
                case 10:
                    System.out.println(month + "月は31日までです");
                    break;
                case 11:
                    System.out.println(month + "月は30日までです");
                    break;
                case 12:
                    System.out.println(month + "月は31日までです");
                    break;
                default:
                    System.out.println("何月かを正しく入力してください。");
            }
                    
        }
      
    }

    実行結果:

    2.  switch文に書き換えることができる条件


  • 全ての条件式が「変数==式」や「変数==変数」のように左辺と右辺が一致するかを比較する式になっており、それ以外の「>」や「<」あるいは「!=」などが使われていません。
  • 比較する値が整数(byte,short,int型)、文字列(String型)または文字(char型)であり、少数た真偽値ではありません。
  • 3.  switch文記述の際の注意点


  • switchの直後に書くのは条件式(条件値==値)ではなく、条件値あるいは変数だけです。
  • caseの横に値をかき、その後ろにコロン : を記述する。
  • case以降の処理の末尾にbreak文を忘れないこと。
  • default:それ以外の処理は不要な場合は省略可能です。
  • 4.  break文を書かない場合


    switch文の正体は「条件に一致するcaseラベルまで処理をジャンプさせる命令」にすぎません。break文で(処理を中三してswitch文を抜ける)という指示がなければ、次のcase文へ処理が進んでしまいます。

    以下のプログラムはあるcaseラベルの処理にbreak文を入れなかった時の処理:

    package helloworld;
    
    import java.util.Scanner; //Scannerクラスのimport
     
    public class HelloWorld {
         
        public static void main(String[] args) {
            int month;
            Scanner scanner = new Scanner(System.in);
             
            System.out.print("あなたは何月が好きですか:");
            month = scanner.nextInt();
             
            switch (month) {
                case 1:
                    System.out.println(month + "月は31日までです");
                    break;
                case 2:
                    System.out.println(month + "月は28日までです");
                    break;
                case 3:
                    System.out.println(month + "月は31日までです");
                    break;
                case 4:
                    System.out.println(month + "月は30日までです");
                    break;
                case 5:
                    System.out.println(month + "月は31日までです");
                    break;
                case 6:
                    System.out.println(month + "月は30日までです");
                    break;
                case 7:
                case 8:
                    System.out.println(month + "月は31日までです");
                    break;
                case 9:
                    System.out.println(month + "月は30日までです");
                    break;
                case 10:
                    System.out.println(month + "月は31日までです");
                    break;
                case 11:
                    System.out.println(month + "月は30日までです");
                    break;
                case 12:
                    System.out.println(month + "月は31日までです");
                    break;
                default:
                    System.out.println("何月かを正しく入力してください。");
            }
                    
        }
      
    }
    

    実行結果:

    説明:

  • 上のプログラムに、7月と8月はどちらも31日まであるので、7月のラベル処理にbreak文を入れなかったら、7月に当たった場合でも処理は7月ラベルを実行してから8月ラベルの処理も行います。そのため、7月ラベルの処理に何も書いてないですが、いい結果が出たわけです。
  • 5.  まとめ


    ここまではswitch文の意味と使い方はわかりましたでしょうか。僕はプログラムを勉強し始めた時に、switchはif-elseの特定の場合にしか代わりに使えないため、覚えるのは嫌で、switchを使わず、どんな場合でもif-else文を使っていました。しかし、開発現場では「プログラムが動けた」だけではなく、他人が見たら「あ、わかりやすい、綺麗な」なども結構必要です。ですから、綺麗なコードになるように、頑張って覚えて利用してください。

    以下は演習問題です。switch文を使いこなすように練習しましょう。

    6.  演習問題


    広告