
こんにちは。「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 + “です。”を格納する。。
- judgeで以下の分岐処理をする。
以下はソースと実行結果です。
ソースコード
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());
}
}
}
結果
合格
不合格
列挙型は特殊なクラスらしく、このような使いかたができるそうです。