こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

swhich文と列挙型とString型

こんにちは。「Javaを復習する初心者」です。switch文で扱えるプリミティブ型とラッパークラスについて前回書きました。swichi文で扱えるものは残りは列挙型とString型です。今回はこの2つの型を使ってみました。

プログラム

以下にフローを書きます。合格、不合格を列挙型で定義して、判定処理するフローです。

フィールド

修飾子

変数の型

変数名

内容
private

列挙型

Judge

PASSED, FAILED

フロー

  1. 列挙型Judgeの定数の配列judgesを定義し、以下の値で初期化する。
    要素番号

    0

    Judge.PASSED
    1

    Judge.FAILED
  2. String型変数resultを定義し、nullで初期化する。
  3. 配列judgesのそれぞれ順番に以下の処理をする。各要素をjudgeとする。
    1. judgeで以下の分岐処理をする。
      1. judgeがPASSEDの場合、resultに”合格”を格納する。
      2. judgeがFAILEDの場合、resultに不合格を格納する。
    2. “result: ” + resultをprintlnで出力する。
    3. String型変数msgを宣言し、nullで初期化する。
    4. resultで以下の分岐処理をする。
      1. resultが”合格”の場合、msgに”おめでとうございます。” + result + “です。”を格納する。
      2. resultが”不合格”の場合、msgに”残念ながら” + result + “です。”を格納する。。

    以下はソースと実行結果です。

    package test;
    
    public class HelloSwitchEnumString {
    
        private static enum Judge {
            PASSED, FAILED
        }
    
        public static void main(String[] args) {
            Judge[] judges = { Judge.PASSED, Judge.FAILED };
            String result = null;
    
            for (Judge judge : judges) {
                switch (judge) {
                case PASSED:
                    result = "合格";
                    break;
                case FAILED:
                    result = "不合格";
                    break;
                }
    
                System.out.println("result: " + result);
    
                String msg = null;
                switch (result) {
                case "合格":
                    msg = "おめでとうございます。" + result + "です。";
                    break;
                case "不合格":
                    msg = "残念ながら" + result + "です。";
                    break;
                }
    
                System.out.println(msg);
            }
        }
    }
    
    result: 合格
    おめでとうございます。合格です。
    result: 不合格
    残念ながら不合格です。
    

    解説

    列挙型では定数をグループ化することができます。一番簡単な方法は定数名のみを列挙する方法です。「private static」の部分については考え方がいろいろあると思いますが、このクラス内のみで使うためこのように記述しました。定数クラスを作ってそこに定義するなら「public static」だと思います。列挙型で定義する定数は大文字のみで書くのが一般的のようです。

    上記サンプルでは列挙型定数の配列を定義し、拡張for文で各要素で分岐処理をしています。前半のswitch文ではキーを列挙型の定数にしています。後半のswitch文ではキーをString型にしています。ただし、昔のバージョンのJavaではswitch文にこのような型をキーにすることができなかったようです。

    列挙型定数

    このサンプルでは列挙型の定数で出力するための分岐処理をしてresultという変数に文字列を格納していますが、以下のように列挙型定数と値を対応させることもできます。

    package test;
    
    public class HelloSwitchEnumLabel {
    
        private static enum Judge {
            PASSED("合格"), FAILED("不合格");
    
            private String label;
    
            private Judge(String label) {
                this.label = label;
            }
    
            public String getLabel() {
                return label;
            }
    
        }
    
        public static void main(String[] args) {
            for (Judge judge : Judge.values()) {
                System.out.println(judge.getLabel());
            }
        }
    }
    
    合格
    不合格
    

    列挙型は特殊なクラスらしく、このような使いかたができるそうです。