条件分岐とは

条件分岐とは「もし◯◯だったら」「そうでなければ」といった条件によって処理を分岐します。

  • 所持金が足りていれば購入、そうでなければ購入できない
  • もし移動距離が1km未満だったら徒歩、1km-5km未満だったら自転車、5km以上だったら電車

if文

条件分岐の基礎となるのがif文です。if のあとに ( ) をつけてその中に条件を記述します。

if (条件)

つぎに { } を記述します。条件がtrueのときの処理を記述します。

if (条件) {
    //処理
}

if文で処理

所持金が価格以上だったら購入メッセージを表示します。

//価格
int price = 200;
//所持金
int money = 100;
//価格が所持金以上だったら
if (money >= price) {
    message = "お買い上げありがとうございました。";
}

if else文

if else文は、条件がfalseだったときも処理できます。

if (条件) {
    //条件がtrueだった時の処理
    処理1;
} else {
    //条件がfalseだった時の処理
    処理2;
}

if else文で処理

所持金があれば購入、そうでなければ購入できないように分岐します。

int price = 200;
money = 100;
if (money >= $price) {
    message = "お買い上げありがとうございました。";
} else {
    message = "購入金額が足りません";
}

else if文

else if文は2つ以上の条件で処理することができます。

if (条件1) {
    処理1;
} else if (条件2) {
    処理2;
} else {
    処理3;
}

else if文で処理

移動距離によって移動方法を変えます。

  • 5km以上:電車
  • 1km以上-5km未満:自転車
  • それ以外:徒歩
float distance = 3.0f;
String moveingMethod;
if (distance >= 5) {
    moveingMethod = "電車";
} else if (distance >= 1 && distance < 5) {
    moveingMethod =  "自転車";
} else {
    moveingMethod = "徒歩";
}
System.out.println(moveingMethod);

if文の自動入力補完

if else文の入力が面倒なときは、自動入力補完してみましょう。まず、ifを入力します。

if

「Ctrl + スペース」で候補が表示されるので、「if else」を選択します。

if else文が自動入力できました。

if (condition) {

} else {

}

ネスト

ネストとは

同じ処理を繰り返するようなコードをネストといいます。例えば、if文をネストすると複雑な条件を処理できます。

if (条件1) {
    if (条件2) {

    } else if (条件3) {

    } else {

    }
}

ネストの処理

雨かどうかを「isRain」で判断し、外出しないという条件を付け加えてみました。

float distance = 3.0f;
String moveingMethod;
boolean isRain = true;
if (isRain) {
    movingMessage = "家にいます";
} else {
    if (distance >= 5) {
        moveingMethod = "電車";
    } else if (distance >= 1 && distance < 5) {
        moveingMethod =  "自転車";
    } else {
        moveingMethod = "徒歩";
    }
}
System.out.println(moveingMethod);

ネストの問題

ネストが連続するコードは、プログラムのアルゴリズムに問題がある場合があります。ネストは必要最低限にするように注意しましょう。

else ifが連続

if (year == 2000) {
	//処理1
} else if (year == 2001) {
	//処理2
} else if (year == 2002) {
	//処理3
} else if (year == 2003) {
	//処理4
...
}

ifのネストが連続

if (isFile) {
	if (isMorning) {
		if (isHoliday) {
			...
		}
	}
}

論理演算子

論理演算子は左と右を比べてtruefalseを判別する演算子で、&&||! の3つあります。

名称 演算子 比較 意味
論理積 AND && A && B A、B両方がtrue
論理和 OR || A || B A、Bどちらかがtrue
論理否定 NOT ! !A Aでない

&&(AND)

&&はAND演算子で、どちらも条件が一致するか判別します。

A B A && B
1 1 1
1 0 0
0 1 0
0 0 0

||(OR)

|| はOR演算子で、どちらかの条件が一致するか判別します。

A B A || B
1 1 1
1 0 1
0 1 1
0 0 0

!(NOT)

!NOTで否定をします。

A !A
1 0
0 1

論理演算子で条件分岐

雨と距離が0以下のときの条件に修正しました。

float distance = 3.0f;
String moveingMethod;
boolean isRain = true;

if (isRain || distance <= 0) {
    movingMessage = "家にいます";
} else {
    if (distance >= 5) {
        moveingMethod = "電車";
    } else if (distance >= 1 && distance < 5) {
        moveingMethod =  "自転車";
    } else {
        moveingMethod = "徒歩";
    }
}
System.out.println(movingMessage);

switch文

switch文は、if文と同じように条件分岐できます。( ) の中は変数を使います。

switch (変数) {
    //分岐処理
}

caseで分岐

caseで変数と値を比較して、条件分岐します。どの条件にもあてはまらない場合、defaultで処理します。また、breakがないと次の処理が実行されるので注意しましょう。

switch (変数) {
  case 値1:
    処理1;
    break;
  case 値2:
    処理2;
    break;
  default:
    処理3;
    break;
}

switch文で処理

「月」「金」に「燃えるゴミ」、「水」に「燃えないゴミ」を取得してみます。

String weekday = "月";
String garbage = "";
switch (weekday) {
    case "月":
    case "金":
        garbage = "燃えるゴミ";
        break;
    case "水":
        garbage = "燃えないゴミ";
        break;
    default:
        garbage = "回収なし";
        break;
}
System.out.println(garbage);

演習

問題1

以下のプログラムで、messageはどうなりますか?

int age = 18;
boolean isBlackList = false;
boolean hasBankAccounts = false;
String message = "クレジットカードを作成できません";

if (!isBlackList && age >= 18 && age < 65) {
	if (hasBankAccounts) {
		message = "クレジットカード作成可能です";
	} else {
		message = "審査が必要です";
	}
}
System.out.println(message);
  1. 何も表示されない
  2. クレジットカード作成可能です
  3. 審査が必要です
  4. クレジットカードを作成できません

問題2

問題1で「income = 1000000」にすると、「message」はどうなりますか?

  1. 何も表示されない
  2. クレジットカード作成可能です
  3. 審査が必要です
  4. クレジットカードを作成できません

問題3

今日の曜日を取得して、燃えるゴミ(月・金)、燃えないゴミ(水)を判別して表示してみましょう。

ヒント

曜日の判別は、Calendarを使って曜日の番号を取得します。ネットや書籍で調べてみましょう。

Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.DAY_OF_WEEK);