10.
条件分岐
条件分岐とは
条件分岐とは「もし◯◯だったら」「そうでなければ」といった条件によって処理を分岐します。
例
- 所持金が足りていれば購入、そうでなければ購入できない
- もし移動距離が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);
- 何も表示されない
- クレジットカード作成可能です
- 審査が必要です
- クレジットカードを作成できません
問題2
問題1で「hasBankAccounts = true」にすると、messageはどうなりますか?
- 何も表示されない
- クレジットカード作成可能です
- 審査が必要です
- クレジットカードを作成できません
問題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 | 空の文字列 |