選択について

この節の要点

  • 条件分岐にはif文とswitch文がある。

Javaで、処理を選択する、つまり条件分岐させる構文は、ifとswitchの2つがあります。

if文は条件式と呼ばれる、ブール型の値として定められる式、に基づいて次の呼び出す処理を選択することができます。ここで条件式とは例えば、"変数\(x\) の中身が\(0\)以外である"を、プログラムの命令文"\(x != 0\)"として記述したものです。 この条件式は、一般的にブール型の節で説明した、関係演算子を使って書き下されることが多いです。

またswitch文は、byte型、short型、char型そしてint型のデータのみしか扱うことができませんが、一致させたいデータのパターンが多くあるような場合、そしてそのパターンごとに処理を選びたいとき、if文よりも簡潔に記述できます。

それぞれ、処理速度の違いはあまりありませんから、書きやすさ・見やすさを記述する処理ごとに判断して、利用するかしないか選択しましょう。

if文

if文の例を図59に示します。このソースコードは、与えられたbirthyear、birthmonthとbirthdayの生年月日に応じて令和生まれか平成生まれかあるいはそれ以外かを判断します。ちなみに以下の条件に則って判断しています。

  • 生年月日が2019年5月以降は令和生まれである。
  • 生年月日が1989年1月8日以降2019年4月以前は平成生まれである。
  • それ以外の生年月日は認識しない。

処理については、Cなどの言語とかわりません。ですから、else if節はいくらでも追加することができます。また、else節は無くても良いです。 if文の丸括弧の中は、ブール値が求まる式であればどんな式でも書くことができます。なお、if文はソースコードの実行順序において先に定義されている条件式から順番に真偽値を判断していくため、前方の式が真であれば、後方の条件式については判断されないことに注意してください。

int birthyear = 2019;
int birthmonth = 6;
int birthday = 7;

if (birthyear >= 2019) {
	if (birthyear == 2019) {
		if (birthmonth >= 5) {
			System.out.println("令和生まれです。");
		} else {
			System.out.println("平成生まれです。");
		}
	} else {
		System.out.println("令和生まれです。");
	}
} else if (birthyear >= 1989) {
	if (birthyear == 1989) {
		if (birthmonth == 1 && birthday < 8) {
			System.out.println("認識できません。");
		} else {
			System.out.println("平成生まれです。");
		}
	} else {
		System.out.println("平成生まれです。");
	}
} else {
	System.out.println("認識できません。");
}
図59:if文を使ったプログラム例

switch文

switch文の例を図60に示します。このソースコードは、monthに与えられた月の数値を元に、対応する英単語を表示します。

switch文の丸括弧で渡されたデータがcase文の値と一致していれば、caseブロックの処理が実行されます。ここで、Javaのswitch文においては、各caseブロックにおいて必ず末尾にbreak文を記述しておく必要がある(記述しなければコンパイルエラーとなる)ことに注意してください。

int month = 8;
String monthString;
switch (month) {
    case 1:  monthString = "January";
	     break;
    case 2:  monthString = "February";
	     break;
    case 3:  monthString = "March";
	     break;
    case 4:  monthString = "April";
	     break;
    case 5:  monthString = "May";
	     break;
    case 6:  monthString = "June";
	     break;
    case 7:  monthString = "July";
	     break;
    case 8:  monthString = "August";
	     break;
    case 9:  monthString = "September";
	     break;
    case 10: monthString = "October";
	     break;
    case 11: monthString = "November";
	     break;
    case 12: monthString = "December";
	     break;
    default: monthString = "Invalid month";
	     break;
}
System.out.println(monthString);
図60:switch文の例