
Java道|複数条件の分岐(if~else if~else)
条件が増えても、上から順に見れば迷わない。
if~else if~else を使うと、複数の分岐をすっきり整理できる。
これまでに、if文では「条件が true のときだけ処理を実行する」方法を学びました。
また、if~else文では「true の場合」と「false の場合」の2通りに処理を分けられるようになりました。
ただ、実際のプログラムでは、2通りだけでは足りないことがよくあります。
たとえば、入力された値が 1 なら朝の案内、2 なら昼の案内、それ以外なら入力し直しの案内を表示する、といった場面です。
また、点数が80点以上なら高評価、60点以上なら合格、それ以外なら復習、といったように、複数の条件を順番に調べたい場合もあります。
このようなときに使うのが、if~else if~else です。
if~else if~else を使うと、複数の条件を上から順に判定し、最初に true になった処理だけを実行できます。この記事では、指定内容に沿って Sample4.java のみを使い、複数条件の分岐を鬼滅の刃風の世界観にたとえながら整理します。
鬼滅の刃風にたとえると、if~else if~else は、戦場で任務札を順番に確認していくようなものです。
一番目の条件に当てはまれば、その指令を実行します。
当てはまらなければ次の札を確認します。
それでも当てはまらなければ、最後の通常指令へ進みます。
つまり、複数の分かれ道を上から順に確認し、最初に合った道だけを進むのが if~else if~else です。
if~else if~else とは何か
if~else if~else は、複数の条件を順番に調べて、最初に当てはまった処理を実行する構文です。
基本の形は次のようになります。
if(条件1){
文1;
}
else if(条件2){
文2;
}
else if(条件3){
文3;
}
else{
文4;
}↓クリックすると拡大表示されます。

この構文では、まず 条件1 を調べます。
条件1 が true なら、文1 を実行します。
そして、その時点で分岐は終了します。
下にある else if や else は実行されません。
条件1 が false なら、次に 条件2 を調べます。
条件2 が true なら、文2 を実行して分岐は終了します。
条件2 も false なら、次の 条件3 を調べます。
条件3 が true なら、文3 を実行します。
そして、どの条件にも当てはまらなかった場合は、最後の else が実行されます。
| 判定の順番 | 条件 | 結果 |
|---|---|---|
| 1 | 条件1 | true なら文1を実行して終了 |
| 2 | 条件2 | 条件1が false のときだけ調べる |
| 3 | 条件3 | 条件2も false のときだけ調べる |
| 最後 | else | どの条件にも当てはまらないときに実行 |
ここで大切なのは、上から順番に調べて、最初に true になったところだけが実行されるということです。
鬼滅の刃風にたとえると、戦場で指令札を上から順に確認するイメージです。
最初の札が条件に合えば、その指令を実行して終了します。
最初の札が合わなければ、次の札へ進みます。
日常の判断に置きかえる
if~else if~else の考え方は、日常の判断でもよくあります。
たとえば、成績によって行動を変える場合です。
if(成績がとてもよい){
ごほうびを用意する;
}
else if(合格している){
ほっとひと安心する;
}
else{
復習をがんばる;
}この流れでは、まず「成績がとてもよいか」を調べます。
それが true なら、ごほうびを用意します。
false なら、次に「合格しているか」を調べます。
合格していれば、ほっとひと安心します。
どちらにも当てはまらなければ、復習をがんばります。
| 状況 | 実行される処理 |
|---|---|
| 成績がとてもよい | ごほうびを用意する |
| とてもよいほどではないが合格 | ほっとひと安心する |
| どちらでもない | 復習をがんばる |
このように、複数の条件を順に確認しながら、その状況に合った処理を選べるのが if~else if~else です。
鬼滅の刃風にたとえると、戦場で次のように判断するイメージです。
| 状況 | 行動 |
|---|---|
| 敵が強力な鬼である | 特別指令を発動する |
| 通常の鬼である | 通常指令を発動する |
| 敵を確認できない | 周囲を警戒する |
複数の状況に応じて、処理を分けられるわけです。
処理の流れをつかむ
if~else if~else の流れは、次のように整理できます。
| 順番 | 動き |
|---|---|
| 1 | 最初の条件を調べる |
| 2 | true なら、そのブロックを実行して終了 |
| 3 | false なら、次の else if の条件を調べる |
| 4 | その条件が true なら、そのブロックを実行して終了 |
| 5 | どの条件も false なら、else を実行する |
大切なのは、条件を1つずつ上から確認していくことです。
そして、最初に true になったブロックだけが実行されます。
それより下の条件は調べられません。
if(条件1){
文1;
}
else if(条件2){
文2;
}
else{
文3;
}この場合、条件1 が true なら 文1 だけが実行されます。
条件2 や else は実行されません。
条件1 が false で、条件2 が true なら 文2 だけが実行されます。
else は実行されません。
条件1 も条件2 も false なら、else の 文3 が実行されます。
図:if~else if~else は上から順に判定する
↓クリックすると拡大表示されます。

この図が示していること
この図では、if~else if~else が条件を上から順に調べる流れを示しています。
まず num == 1 を確認します。
true なら おはようございます。 を表示して、分岐はそこで終わります。
num == 1 が false の場合だけ、次に num == 2 を確認します。
num == 2 が true なら こんにちは。 を表示します。
num == 1 も num == 2 も false の場合は、最後の else に進み、1か2を入力してください。 を表示します。
ここから分かることは、if~else if~else では、上から順番に条件を調べ、最初に true になった場所だけが実行されるということです。
else if はいくつでも増やせる
if~else if~else の便利なところは、else if を必要なだけ追加できることです。
条件が2つだけでなく、3つ、4つ、5つと増えても、上から順に並べて書けます。
if(条件1){
文1;
}
else if(条件2){
文2;
}
else if(条件3){
文3;
}
else if(条件4){
文4;
}
else{
文5;
}このように、条件の数に合わせて else if を追加できます。
| 分岐の数 | 向いている書き方 |
|---|---|
| 1つの条件だけ | if文 |
| true / false の2通り | if~else文 |
| 3通り以上 | if~else if~else |
ただし、条件が多くなるほど、順番が大切になります。
上にある条件から先に調べられ、true になった時点で下の条件は調べられないからです。
最後の else は省略できる
if~else if~else では、最後の else は必ず書かなければならないわけではありません。
必要がなければ、省略できます。
if(条件1){
文1;
}
else if(条件2){
文2;
}この場合、条件1 も 条件2 も false だったときは、何も実行されずに次の処理へ進みます。
| 書き方 | どの条件にも当てはまらない場合 |
|---|---|
| else あり | else の処理を実行する |
| else なし | 何も実行せず次へ進む |
else は、「どの条件にも当てはまらなかったときの処理」を書きたい場合に使います。
鬼滅の刃風にたとえると、else は「どの指令札にも当てはまらなかったときの通常対応」です。
特別任務でも昼任務でもないなら、通常案内を表示するような役割です。
複数条件の分岐を確認する
ここでは、入力された整数によって、表示するメッセージを変えるプログラムを見ていきます。
1 が入力されたら朝のあいさつ、2 が入力されたら昼のあいさつ、それ以外なら入力案内を表示します。
ファイル名:Sample4.java
import java.io.*;
class Sample4
{
public static void main(String[] args) throws IOException
{
System.out.println("任務番号を入力してください。");
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int num = Integer.parseInt(str);
if(num == 1){
System.out.println("朝の任務です。おはようございます。");
}
else if(num == 2){
System.out.println("昼の任務です。こんにちは。");
}
else{
System.out.println("1か2の任務番号を入力してください。");
}
}
}このプログラムでは、入力された値に応じて表示が変わります。
| 入力値 | 表示される内容 |
|---|---|
| 1 | 朝の任務です。おはようございます。 |
| 2 | 昼の任務です。こんにちは。 |
| それ以外 | 1か2の任務番号を入力してください。 |
鬼滅の刃風にたとえると、任務番号 1 は朝の巡回任務、任務番号 2 は昼の警戒任務、それ以外は正しい任務番号を案内する流れです。
Sample4.javaの処理の流れ
Sample4.java の処理は、次のように進みます。
| 順番 | 処理内容 |
|---|---|
| 1 | 入力をうながすメッセージを表示する |
| 2 | キーボードから文字列を読み取る |
| 3 | 入力された文字列を整数に変換する |
| 4 | num == 1 を調べる |
| 5 | num == 1 が false なら num == 2 を調べる |
| 6 | どちらも false なら else の処理を行う |
注目したいのは、条件を上から順に確認していることです。
if(num == 1){
System.out.println("朝の任務です。おはようございます。");
}
else if(num == 2){
System.out.println("昼の任務です。こんにちは。");
}
else{
System.out.println("1か2の任務番号を入力してください。");
}まず num == 1 を調べます。
これが true なら、朝の任務メッセージを表示して分岐は終了します。
num == 1 が false の場合だけ、num == 2 を調べます。
これが true なら、昼の任務メッセージを表示します。
どちらにも当てはまらない場合は、else が実行されます。
1を入力した場合
1 を入力した場合、最初の条件 num == 1 が true になります。
実行例は次のようになります。
任務番号を入力してください。
1
朝の任務です。おはようございます。この場合、最初の if ブロックが実行されます。
| 入力値 | num == 1 | num == 2 | 実行される処理 |
|---|---|---|---|
| 1 | true | 調べない | 朝の任務です。おはようございます。 |
ここで大切なのは、num == 1 が true になった時点で、下の else if や else は実行されないことです。
つまり、num == 2 は調べられません。
最初に true になったところだけが実行されます。
2を入力した場合
2 を入力した場合、最初の条件 num == 1 は false になります。
そのため、次の else if に進みます。
else if(num == 2){
System.out.println("昼の任務です。こんにちは。");
}ここで num == 2 が true になるので、昼の任務メッセージが表示されます。
実行例は次のようになります。
任務番号を入力してください。
2
昼の任務です。こんにちは。| 入力値 | num == 1 | num == 2 | 実行される処理 |
|---|---|---|---|
| 2 | false | true | 昼の任務です。こんにちは。 |
このように、最初の条件が false でも、次の条件が true なら、その場所で処理が決まります。
それ以外を入力した場合
5 を入力した場合を考えます。
この場合、
num == 1は false です。
さらに、
num == 2も false です。
そのため、最後の else が実行されます。
実行例は次のようになります。
任務番号を入力してください。
5
1か2の任務番号を入力してください。| 入力値 | num == 1 | num == 2 | 実行される処理 |
|---|---|---|---|
| 5 | false | false | 1か2の任務番号を入力してください。 |
else は、どの条件にも当てはまらなかった場合の受け皿です。
どこが実行されるのかを整理する
Sample4.java の動きを表にまとめると、次のようになります。
| 入力値 | num == 1 | num == 2 | 実行される処理 |
|---|---|---|---|
| 1 | true | 調べない | 朝の任務です。おはようございます。 |
| 2 | false | true | 昼の任務です。こんにちは。 |
| 5 | false | false | 1か2の任務番号を入力してください。 |
ここで注目したいのは、1つの分岐で実行されるのは1か所だけということです。
たとえば、1 を入力した場合は、最初の条件 num == 1 が true になります。
その時点で処理が決まるため、下の else if や else は調べられません。
if~else if~else は、上から順番に条件を調べ、最初に true になったブロックだけを実行します。
図:Sample4.javaの分岐の流れ
↓クリックすると拡大表示されます。

この図が示していること
この図では、Sample4.java の条件分岐の流れを示しています。
まず、入力された num を確認します。
num == 1 が true なら、朝の任務です。おはようございます。 を表示します。
num == 1 が false の場合だけ、次の num == 2 を確認します。
num == 2 が true なら、昼の任務です。こんにちは。 を表示します。
num == 1 も num == 2 も false の場合は、else に進み、1か2の任務番号を入力してください。 を表示します。
ここから分かることは、if~else if~else は条件を段階的に確認し、当てはまった1か所だけを実行する構文だということです。
条件の順番が大切
if~else if~else を使うときに、特に大切なのが条件の順番です。
なぜなら、上にある条件から先に調べられ、true になった時点で分岐が終わるからです。
たとえば、点数で判定する場合を考えます。
if(score >= 60){
System.out.println("合格です。");
}
else if(score >= 80){
System.out.println("とてもよくできました。");
}この書き方には問題があります。
なぜなら、80点以上の人も score >= 60 に当てはまるからです。
たとえば、score が 90 の場合、
score >= 60は true になります。
その時点で if ブロックが実行され、分岐は終了します。
そのため、下にある score >= 80 は調べられません。
| score | score >= 60 | score >= 80 | 表示 |
|---|---|---|---|
| 90 | true | 調べない | 合格です。 |
本当は 80点以上なら「とてもよくできました。」と表示したいのに、先に score >= 60 が true になってしまうため、期待した結果になりません。
このような場合は、より厳しい条件を先に書きます。
if(score >= 80){
System.out.println("とてもよくできました。");
}
else if(score >= 60){
System.out.println("合格です。");
}この順番なら、80点以上を先に判定できます。
| score | score >= 80 | score >= 60 | 表示 |
|---|---|---|---|
| 90 | true | 調べない | とてもよくできました。 |
| 70 | false | true | 合格です。 |
| 40 | false | false | どちらにも当てはまらない |
if~else if~else では、条件を書く順番が結果に大きく影響します。
鬼滅の刃風にたとえると、強い鬼への特別対応を先に確認せず、通常対応を先にしてしまうと、本来の特別指令が発動しないようなものです。
重要な条件、狭い条件、厳しい条件を先に書くことが大切です。
if~else文との違い
if~else if~else は、if~else文 をさらに発展させた構文です。
| 構文 | 分岐の特徴 |
|---|---|
| if文 | 条件が true のときだけ処理する |
| if~else文 | true と false の2通りに分ける |
| if~else if~else | 3通り以上の条件分岐ができる |
2通りの分岐なら、if~else文で十分です。
たとえば、num が 5 か、それ以外かを分けるだけなら if~else文で書けます。
しかし、1 の場合、2 の場合、3 の場合、それ以外、というように分岐が増えるなら、if~else if~else が便利です。
| 条件の数 | 使いやすい構文 |
|---|---|
| 1つ | if文 |
| 2通り | if~else文 |
| 3通り以上 | if~else if~else |
複数の選択肢を順番に調べたいとき、if~else if~else はとても役立ちます。
読みやすい書き方を心がける
条件が増えると、コードはどうしても長くなりやすいです。
そのため、ブロックの { } とインデントを丁寧に書くことが大切です。
if(num == 1){
System.out.println("朝の任務です。おはようございます。");
}
else if(num == 2){
System.out.println("昼の任務です。こんにちは。");
}
else{
System.out.println("1か2の任務番号を入力してください。");
}このように書くと、どこが if で、どこが else if で、どこが else なのかが分かりやすくなります。
| 書き方のポイント | 理由 |
|---|---|
| { } を使う | 処理の範囲が明確になる |
| インデントをそろえる | 分岐の構造が読みやすくなる |
| 条件を上から自然な順番で並べる | 判定の流れを追いやすくなる |
| else を必要に応じて書く | どれにも当てはまらない場合を扱える |
インデントには文法上の意味はありません。
しかし、コードを読む人にとってはとても大切です。
特に条件分岐では、少し見た目が崩れるだけで、処理の範囲を誤解しやすくなります。
if~else if~else を読むときのポイント
if~else if~else を読むときは、次の順番で確認すると分かりやすくなります。
| 確認すること | 見る場所 |
|---|---|
| 最初に調べる条件 | if の条件 |
| 次に調べる条件 | else if の条件 |
| どれにも当てはまらない場合 | else |
| 実行される処理 | true になったブロック |
| 条件の順番 | 上から順に自然かどうか |
たとえば、次のコードを見るときは、
if(num == 1){
System.out.println("朝の任務です。おはようございます。");
}
else if(num == 2){
System.out.println("昼の任務です。こんにちは。");
}
else{
System.out.println("1か2の任務番号を入力してください。");
}まず、num == 1 を見ます。
次に、num == 2 を見ます。
最後に、どちらにも当てはまらない場合の else を見ます。
このように上から順に読むと、処理の流れをつかみやすくなります。
if~else if~else を理解するための重要ポイント
if~else if~else を学ぶときは、次の点を押さえておくと安心です。
| ポイント | 内容 |
|---|---|
| 複数の条件を順番に判定できる | else if を使って条件を増やせる |
| 最初に true になった場所だけが実行される | その下の条件は調べられない |
| 1つの分岐で実行されるのは1か所だけ | 複数のブロックが同時に実行されるわけではない |
| 最後の else は受け皿になる | どの条件にも当てはまらない場合を扱える |
| 最後の else は省略できる | 不要なら書かなくてもよい |
| 条件の順番が大切 | 上から順に評価されるため |
| 3通り以上の分岐に向いている | 複数の選択肢を整理しやすい |
この中でも特に重要なのは、最初に true になった場所だけが実行されるという点です。
if(条件1){
文1;
}
else if(条件2){
文2;
}
else{
文3;
}条件1 が true なら 文1 だけが実行されます。
条件2 や else は実行されません。
条件1 が false で、条件2 が true なら 文2 だけが実行されます。
条件1 も条件2 も false なら、else の 文3 が実行されます。
複数条件の分岐を整理できる便利な構文
if~else if~else は、複数の条件に応じて処理を切り替えるための便利な構文です。
入力値、点数、状態、選択肢などによって、3通り以上の分岐が必要になる場面はよくあります。
| 場面 | 分岐の例 |
|---|---|
| 入力値 | 1なら朝、2なら昼、それ以外なら案内 |
| 点数 | 80点以上、60点以上、それ以外 |
| 状態 | 攻撃、防御、待機 |
| 選択肢 | メニュー1、メニュー2、その他 |
| 任務番号 | 特別任務、通常任務、入力案内 |
鬼滅の刃風にたとえると、if~else if~else は、戦場で状況を順番に確認し、その状況に合った指令を1つだけ選ぶための構文です。
敵の種類、任務番号、隊士の状態など、判断材料が増えても、上から順に条件を並べることで、処理を整理できます。
複雑に見える条件分岐も、次の考え方を持っておくと読みやすくなります。
| 読み方 | 内容 |
|---|---|
| 上から順に見る | Javaは上から条件を調べる |
| true になったら止まる | そのブロックだけを実行する |
| 当てはまらなければ次へ進む | false なら次の else if へ進む |
| 最後は else が受ける | どれにも当てはまらない場合を処理する |
この流れを押さえておくと、if~else if~else の分岐はかなり読みやすくなります。
