プログラムの基本は、順次処理、分岐処理、反復処理の3つの制御構造から構成されています
これらを適切に組み合わせて、プログラムを作成していきます
前回までは、コンピュータに実行させたい処理を順に書く「順次処理」でプログラムを作成していました
この章では、制御構造の一つである「分岐処理」について説明をしていきます
「分岐処理」とは、ある条件によって実行の流れを変える処理のことです。条件が真の場合と偽の場合で異なる処理を行うことができます
条件分岐
Javaでは、2方向分岐のif文
、多方向分岐のelse if文
とswtich
文が存在します
if文
if文は「もし〇〇だったら、△△する」というように、条件が満たされ場合のみ処理を実⾏する場合に使用します
以下の構文のように記述し、()内の条件式が成立した場合、{}で囲まれたブロックの処理を実行します
if (条件式) {
// 条件式がtrueの場合実⾏する処理
}
条件式には、比較演算子
を用いて2つの値を比較することが頻繁にあります比較演算子
は以下の通りです
演算子 | 読み | 書き方 | 説明 |
---|---|---|---|
> | 大なり | a>b | aはbより大きいとき真 |
>= | 大なりイコール | a>=b | aはb以上とき真 |
< | 小なり | a<b | aはbより小さいとき真 |
<= | 小なりイコール | a<=b | aはb以下のとき真 |
== | イコール | a==b | aとbは等しいとき真 |
!= | ノットイコール | a!=b | aとbは等しくないとき真 |
※比較演算子は2つの値の大小関係を比較し、真のときにはtrueを、偽のときにはfalseを生成します
以下はif文を使用したサンプルです
このサンプルでは、ageが18未満の値のとき条件式が真となり「未成年です」と出力されます
if (age < 18) {
System.out.println("未成年です\n");
}
if文の流れ図は以下の通りです

【演習問題】
- 0から10までの整数を1つ乱数で⽣成し値が10以上なら「10以上です」と表⽰するプログラムを作成しましょう
なお、乱数の発⽣のさせ⽅は次の通りです
Random rand = new Random();
int randomNumber = rand.nextInt(11); //0から10までの整数を⽣成する
```
実⾏結果
11は10以上の整数です
```
- 0から10までの整数を1つ乱数で⽣成し、値が1でなければ「1ではありません」と表⽰するプログラムを作成しましょう
実⾏結果
2は1ではありません
- 0から100までの整数を1つ乱数で⽣成し、値が20以上80未満のとき「20以上80未満です」と表⽰しましょう
実⾏結果
20は20以上80未満です
if~else文
if文の後ろにelesを続けることで、条件式が偽の場合の処理を記述できるようになります
構文は以下の通りです
if (条件式) {
// 条件式が真の場合実⾏する処理
} else{
// 条件式が偽の場合実⾏する処理
}
if~else文を用いたサンプルを以下に示します
このサンプルでは、ageが18未満の値のとき条件式が真(true)となり「未成年です」と出力され、ageが18以上のとき「18歳以上です」と出力されます
if (age < 18) {
System.out.println("未成年です");
} else{
System.out.println("18歳以上です");
}
if~else文の流れ図は以下の通りです

【演習問題】
- 1から10までの整数を乱数で発⽣させ、5以上なら「5以上です」、そうでなければ「5未満です」と表⽰するプログラムを作成しましょう
実⾏結果
6は5以上です
- 1から10までの整数を乱数で発⽣させ、取得した値が1ではないとき「1ではありません」、そうでなければ「1です」と表⽰するプログラムを作成しましょう
実⾏結果
2は1ではありません
- 1から100までの整数を乱数で発⽣させ、取得した値が20以上80未満のとき「20以上80未満です」、そうでなければ「範囲外です」と表⽰するプログラムを作成しましょう
実⾏結果
75は20以上80未満です
else if文
もし条件が成り立たないときには別の条件で評価をしたい場合、else if文をelseの前に挿入することができます
条件が複数から成る場合は、else ifを使用して処理を書いていきます
構文は以下の通りです
if (条件式1) {
// 条件式1が真の場合実⾏する処理
} else if (条件式2) {
// 条件式1が偽で条件2が真の場合実⾏する処理
} else {
// 条件式1も条件式2も偽のとき実⾏する処理
}
else if文を用いたサンプルを以下に示します
このサンプルでは、x>yが真のとき「xはyより大きいです」と出力し、x<yが真のとき「xはyより小さいです」と出力し、どちらの条件も満たさない場合「xとyは等しいです」と出力します
if (x > y) {
System.out.println("xはyより⼤きいです");
} else if (x < y) {
System.out.println("xはyより⼩さいです");
} else {
System.out.println("xとyは等しいです");
}
条件分岐の流れ図は以下の通りです

「aの値が10以上かつ20以下である」のように複数の条件を組み合わせた条件式を書く場合、論理演算子
を使用します論理演算子
は以下の通りです
演算子 | 名前 | 書き方 | 説明 |
---|---|---|---|
&& | 論理積(かつ) | if(a<=0 && b<=0) | 両方の条件が成立すれば真 |
|| | 論理和(または) | if(a<=0 || b<=0) | どちらかの条件が成立すれば真 |
! | 否定(でない) | !(a>0) | 真のとき偽。偽のとき真 |
論理演算子を用いたサンプルを以下に示します
if (x > 3 && x < 20){
System.out.println("x は3より⼤きく20より⼩さい");
}
x の値が3より大きく かつ 20より小さいとき条件式が真となります
if (x > 10 || y < 20){
System.out.println("x が10より⼤いか、y が30よりも⼩さい");
}
xの値が10よりおおきい または yの値が20より小さいとき 真となります
if (!(x == 10)){
System.out.println("xは10と等しくない");
}
xの値が10ではないとき真となります
【演習問題】
- 1から4までの整数を定義し、取得した値が1なら「春です」、2なら「夏です」、3なら「秋です」、4なら「冬です」と表⽰するプログラムをif-elseif-else⽂を使⽤して作成しましょう
※すべての条件を通るようにテストをしましょう
実⾏結果
定義した値:3
秋です
定義した値:2
夏です
定義した値:1
春です
定義した値:4
冬です
- 1から4までの整数を2つ定義し、それぞれ変数a,bに代⼊する。aの⽅が⼤きければ「aの⽅が⼤きいです」、bの⽅が⼤きければ「bの⽅が⼤きいです」、そうでなければ「等しいです」と表⽰するプログラムを作成しましょう
※すべての条件を通るようにテストしましょう
実⾏結果
b=2の⽅がa=1より⼤きい
a=3の⽅がb=1より⼤きい
a=5,b=5は等しいです
- 1から100までの数値を定義し、以下の処理を実⾏しましょう
(1) 80点以上なら”優”と表⽰
(2) 80点未満、70点以上なら、”良”と表⽰
(3) 70点未満、60点以上なら、”可”と表⽰
(4) 60点未満なら、”不可”と表⽰
※すべての条件を通るようにテストしましょう
実⾏結果
59:不可です
60:可です
69:可です
70:良です
79:良です
80:優です
100:優です
switch文
else ifを用いた多方向分岐で、条件式に==
を使い、比較する対象が整数値、文字型、文字列型である場合、switch(スイッチ)文
を用いて以下のように書くことができます
構文は以下の通りです
switch(式) { // switchブロックの始まり
case 値1: // [式]の値が[値1]のときこれ以降の命令⽂1が実⾏される
命令⽂1
break; // switchブロックを抜ける
case 値2: // [式]の値が[値2]のときこれ以降の命令⽂2が実⾏される
命令⽂2
break; // switchブロックを抜ける
case 値3: // [式]の値が[値3]のときこれ以降の命令⽂3が実⾏される
命令⽂3
break; // switchブロックを抜ける
default: // [式]の値が[値1]から[値3]ではないときこれ以降の命令⽂4が実⾏される
命令⽂4
break; // switchブロックを抜ける
} // switchブロックの終わり
それぞれの値に応じて実⾏する処理はcase句で表します
すべての値に合致しない場合に実⾏する処理はdefault句で表します
case,default句の末尾はbreak⽂で終わるのが原則です
Java 12以降の場合は以下のように記述できます
switch(式) { // switchブロックの始まり
case 値1 -> {
命令⽂1
}
case 値2 -> {
命令⽂2
}
case 値3 -> {
命令⽂3
}
default -> {
命令⽂4
}
} // switchブロックの終わり
case句のあとに->を記述し{}で一つのブロックを表します
この場合、break文は不要です
switch~case文を用いたサンプルを以下に示します
int b=2;
switch(b){
case 1->{
System.out.println("bは1です");
}
case 2->{
System.out.println("bは2です");
}
case 3->{
System.out.println("bは3です");
}
default->{
System.out.println("bは1,2,3以外です");
}
}
int型の変数「b」が1から3のいずれかの値と一致した場合、それぞれの処理を実行後、switch文を抜けます
1から3のいずれの値とも一致しない場合、default句の処理を実行します
また、case句の中に複数の値をカンマ(,)区切りで記載すると、そのいずれかの値が一致するときに処理を実行します
int month=3;
switch(month){
case 3,4,5->{
System.out.println("春です");
}
default->{
System.out.println("春ではありません。");
}
}
または
switch(month){
case 3,4,5:
System.out.println("春です");
break;
default:
System.out.println("春ではありません。");
break;
}
【演習問題】
- 1桁の整数を定義し、1なら「春です」、2なら「夏です」、3なら「秋です」、4なら「冬です」、1から4以外であれば「該当しません」と表⽰するプログラムをswitch⽂を使⽤して作成しましょう
※すべての条件を通るようにテストを実施しましょう
実⾏結果
整数:1
春です
整数:2
夏です
整数:3
秋です
整数:4
冬です
整数:0
該当しません
コメント