9.
条件分岐
条件分岐とは
条件分岐とは「もし◯◯だったら」「そうでなければ」といった条件によって処理を分岐します。
例
- 所持金が足りていれば購入、そうでなければ購入できない
- もし移動距離が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) {
...
}
}
}
論理演算子
論理演算子は左と右を比べてtrueかfalseを判別する演算子で、&&、||、! の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);
- 何も表示されない
- クレジットカード作成可能です
- 審査が必要です
- クレジットカードを作成できません
問題2
問題1で「income = 1000000」にすると、「message」はどうなりますか?
- 何も表示されない
- クレジットカード作成可能です
- 審査が必要です
- クレジットカードを作成できません
問題3
今日の曜日を取得して、燃えるゴミ(月・金)、燃えないゴミ(水)を判別して表示してみましょう。
ヒント
曜日の判別は、Calendarを使って曜日の番号を取得します。ネットや書籍で調べてみましょう。
Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.DAY_OF_WEEK);