こんにちは。「Javaを復習する初心者」です。
switch文で扱えるプリミティブ型とラッパークラスについて前回書きました。swichi文で扱えるものは残りは列挙型とString型です。今回はこの2つの型を使ってみました。
ソースと実行結果
以下にフローを書きます。合格、不合格を列挙型で定義して、判定処理するフローです。
フィールド
修飾子 | 変数の型 | 変数名 | 内容 |
---|---|---|---|
private | 列挙型 | Judge | PASSED, FAILED |
フロー
- 列挙型Judgeの定数の配列judgesを定義し、以下の値で初期化する。
要素番号 値 0 Judge.PASSED 1 Judge.FAILED - String型変数resultを定義し、nullで初期化する。
- 配列judgesのそれぞれ順番に以下の処理をする。各要素をjudgeとする。
- judgeで以下の分岐処理をする。
- judgeがPASSEDの場合、resultに”合格”を格納する。
- judgeがFAILEDの場合、resultに不合格を格納する。
- “result: ” + resultをprintlnで出力する。
- String型変数msgを宣言し、nullで初期化する。
- resultで以下の分岐処理をする。
- resultが”合格”の場合、msgに”おめでとうございます。” + result + “です。”を格納する。
- 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()); } } }
結果合格 不合格
列挙型は特殊なクラスらしく、このような使いかたができるそうです。
- judgeで以下の分岐処理をする。