条件分岐とは

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

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

if文

ファイル構成

src/
  └── sample/
         └── Condition.java

if

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

if (条件)

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

if (条件) {
    //処理
}

if文のコードアシスタント

VSCodeで if を入力したら、コードアシスタントで「if statement」を選択すると便利です。

if文で処理

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

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

if else

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

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

if文のコードアシスタント

コードアシスタントで「ifelse statement」を選択すると便利です。

if else文で処理

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

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

else if文

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

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

priceが「0」以下だったらエラーになるようにします。

sample/Condition.java
int price = 200;
int money = 100;

// if追加
if (price <= 0) {
    message = "価格が正しくありません。";
// else if に変更
} else if (money >= price) {
    message = "お買い上げありがとうございました。";
} else {
    message = "購入金額が足りません。";
}
System.out.println(message);

論理演算子

論理演算子左と右を比べてTrue、Falseを判別する演算子です。

名称 演算子 比較 意味
論理積 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

論理演算子で条件分岐

moneyが「0」以下の場合もエラーになるようにします。

sample/Condition.java
int price = 200;
int money = 100;

//OR演算子追加
if (price <= 0 || money <= 0) {
    message = "価格が正しくありません。";
} else if (money >= price) {
    message = "お買い上げありがとうございました。";
} else {
    message = "購入金額が足りません。";
}
System.out.println(message);

ネスト

ネストとは

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

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

    } else if (条件3) {

    } else {

    }
}

ネストの問題

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

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) {
			...
		}
	}
}

switch文

switch

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

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

caseで分岐

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

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

switch文で処理

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

sample/Condition.java
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;
int income = 3000000;
String message = "クレジットカードを作成できません";

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

問題2

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

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

問題3

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

ヒント

曜日の判別は、Calendarクラスなどを使って曜日の番号を取得します。

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

問題4

if文でジャンケンの結果を作成してみましょう。

ジャンケンの変数・定数

項目 変数・定数名 データ型 初期値
グー ROCK int 0
チョキ SCISSORS int 1
パー PAPER int 2
自分の手 playerHand int 任意
PCの手 pcHand int 任意
じゃんけんの結果 result int ジャンケンの計算
結果のメッセージ message String 空の文字列