Java超|if文の使い方

条件が true になった瞬間だけ、Javaの技が発動する。
if文を覚えると、プログラムは「判断して動く戦士」へ進化する。

これまでのJavaプログラムは、基本的に上から下へ順番に処理を実行してきました。

たとえば、

  1. メッセージを表示する
  2. 入力を受け取る
  3. 結果を表示する

というように、一本道で進んでいく流れです。

しかし、実際のプログラムでは、いつも同じ処理だけを実行すればよいわけではありません。

たとえば、

  • 特定の番号が入力されたときだけ特別なメッセージを表示したい
  • 点数が一定以上なら合格と表示したい
  • 体力が残っているときだけ攻撃したい
  • 条件を満たした場合だけ特別な処理を動かしたい

このように、「条件に応じて処理を実行するかどうか」を決めるために使うのが if文 です。

if文は、条件が true のときだけ指定した処理を実行します。
条件が false のときは、その処理を行わずに次へ進みます。

ドラゴンボール風にたとえるなら、if文は「条件がそろったときだけ発動する技」です。

  • 敵との距離が近いなら近接技を使う
  • 体力が十分なら攻撃に出る
  • 特別な任務札を持っているなら追加指令を表示する

このように、状況を見て技を発動するかどうかを決める仕組みが if文 です。

if文とは何か

if文は、条件が true のときだけ文を実行するための構文です。

基本の形は次のようになります。

if(条件)
    文;

この形では、条件が true だった場合だけ、直後の文が実行されます。

条件が false の場合、その文は実行されず、次の処理へ進みます。

条件の結果if文の中の処理
true実行される
false実行されない

if文を日本語で考えると、

「もし条件が成り立つなら、この処理をする」

という意味です。

たとえば、日常生活では次のような判断があります。

日常の判断if文の考え方
よい成績を取ったら、ごほうびを買う条件が true なら、ごほうび処理を実行する
任務番号が一致したら、指令を表示する条件が true なら、指令表示を実行する
体力が残っていたら、修行を続ける条件が true なら、修行処理を実行する

ドラゴンボール風にたとえると、if文は「条件が整ったときだけ発動する型」です。

条件が整っていなければ、その型は発動せず、次の動きへ進みます。

if文の流れ

if文の動きは、次の順番で考えると分かりやすいです。

順番処理
1条件を調べる
2条件が true なら、指定した文を実行する
3条件が false なら、その文を飛ばす
4if文の次の処理へ進む

ここで大切なのは、条件が false のときにプログラム全体が止まるわけではないことです。

if文の対象になっている処理だけを飛ばして、その次の処理へ進みます。

たとえば、

「敵が近くにいるなら警告を出す」

という処理があるとします。

敵が近くにいれば警告を出します。
近くにいなければ警告は出さず、次の確認へ進みます。

このように、if文はプログラム全体を止めるものではなく、一部の処理を条件つきで実行する仕組みです。

図:if文は true のときだけ処理を実行する

この図が示していること

この図では、if文が条件の結果によって処理を実行するかどうかを決めることを示しています。

条件が true の場合は、if文の対象になっている処理が実行されます。
条件が false の場合は、その処理を飛ばして次へ進みます。

ここから分かることは、if文は「true のときだけ実行する」ための構文だということです。

日常の判断をif文で考える

if文は、日常の判断に置き換えると理解しやすくなります。

たとえば、次のような考え方があります。

if(よい成績をとった)
    ごほうびを買う;

実際のJavaでは日本語の条件を書くことはできませんが、考え方はこの形です。

条件である「よい成績をとった」が true なら、「ごほうびを買う」が実行されます。

条件が false なら、その処理は実行されません。

ドラゴンボール風にたとえると、次のようになります。

if(任務札の番号が7である)
    特別指令を表示する;

任務札の番号が 7 なら、特別指令が表示されます。

7 でなければ、その指令は表示されず、次の確認へ進みます。

このように、if文は「条件に合ったときだけ実行したい処理」を書くために使います。

if文の基本を確認する

ここでは、ユーザーに整数を入力してもらい、その値が 7 のときだけ特別なメッセージを表示するプログラムを見ていきます。

ファイル名:Sample1.java

import java.io.*;

class Sample1
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("任務札の番号を1つ入力してください。");

        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        int num = Integer.parseInt(str);

        if(num == 7)
            System.out.println("特別任務の札です。慎重に進みましょう。");

        System.out.println("任務札の確認が終わりました。");
    }
}

このプログラムでは、入力された整数が 7 のときだけ、次のメッセージが表示されます。

特別任務の札です。慎重に進みましょう。

そして最後には必ず次のメッセージが表示されます。

任務札の確認が終わりました。

ここで使っている if文 は次の部分です。

if(num == 7)
    System.out.println("特別任務の札です。慎重に進みましょう。");

条件は num == 7 です。

num の値が 7 と等しければ true。
7 以外なら false になります。

Sample1.java の処理の流れ

Sample1.java は、次のような順番で動きます。

順番処理内容
1入力をうながすメッセージを表示する
2キーボードから入力を受け取る
3入力された文字列を整数に変換する
4num == 7 という条件を調べる
5条件が true なら特別任務メッセージを表示する
6最後の確認メッセージを表示する

特に大切なのは 4番目と5番目です。

if(num == 7)
    System.out.println("特別任務の札です。慎重に進みましょう。");

この条件が true なら、次の1文が実行されます。
false なら、その1文は実行されません。

条件がtrueだった場合

たとえば、ユーザーが 7 を入力したとします。

この場合、num の値は 7 です。

num == 7

この条件は true になります。

実行例は次のようになります。

任務札の番号を1つ入力してください。
7
特別任務の札です。慎重に進みましょう。
任務札の確認が終わりました。

条件が true だったため、if文の対象になっているメッセージが表示されました。

入力値条件 num == 7if文の中の処理
7true実行される

ドラゴンボール風にたとえると、任務札の番号が 7 だったため、特別任務ゲートが開いたような流れです。

条件がfalseだった場合

次に、ユーザーが 3 を入力した場合を考えます。

この場合、num の値は 3 です。

num == 7

この条件は false になります。

実行例は次のようになります。

任務札の番号を1つ入力してください。
3
任務札の確認が終わりました。

特別任務のメッセージは表示されません。

ただし、最後の確認メッセージは表示されます。

入力値条件 num == 7if文の中の処理
3false実行されない

ここで大切なのは、条件が false でもプログラム全体は止まらないことです。

if文の対象になっている文だけを飛ばして、次の処理へ進みます。

if文の対象になる範囲

Sample1.java の if文では、条件が true のときに実行されるのは直後の1文だけです。

if(num == 7)
    System.out.println("特別任務の札です。慎重に進みましょう。");

System.out.println("任務札の確認が終わりました。");

この場合、if文の対象は次の1文です。

System.out.println("特別任務の札です。慎重に進みましょう。");

その次の文は if文の外です。

System.out.println("任務札の確認が終わりました。");

そのため、最後の確認メッセージは常に実行されます。

文if文の対象か実行される条件
特別任務メッセージ対象num == 7 が true のときだけ
確認終了メッセージ対象外常に実行される

この「どこまでが if文 の対象なのか」を正しく読むことが、とても大切です。

図:Sample1.java の true と false の流れ

この図が示していること

この図では、Sample1.java で 7 を入力した場合と 3 を入力した場合の流れを比較しています。

7 を入力した場合、num == 7 は true になります。
そのため、if文の中のメッセージが表示されます。

3 を入力した場合、num == 7 は false になります。
そのため、if文の中のメッセージは表示されません。

ただし、どちらの場合でも最後の「任務札の確認が終わりました。」は表示されます。

ここから分かるのは、if文は処理全体を分けるのではなく、一部の処理だけを条件つきで実行するということです。

if文で複数の文を処理する

ここまでの if文 では、条件が true のときに1文だけを実行していました。

しかし、実際には条件が true のときに複数の処理をまとめて実行したいことがあります。

そのときに使うのがブロックです。

ブロックとは、{ } で囲まれた処理のまとまりです。

if(条件){
    文1;
    文2;
    文3;
}

このように書くと、条件が true のときに、ブロック内の文が上から順番に実行されます。

条件が false のときは、ブロック全体が実行されません。

書き方true のときに実行される範囲
if(条件) 文;直後の1文だけ
if(条件){ 文1; 文2; }ブロック内のすべての文

ドラゴンボール風にたとえると、ブロックは「連続技のセット」です。

条件が true になった瞬間、複数の技がまとめて発動します。

ブロックを確認する

次に、条件が true のときに複数のメッセージを表示するプログラムを見ていきます。

ファイル名:Sample2.java

import java.io.*;

class Sample2
{
    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 == 5){
            System.out.println("第五任務が選ばれました。");
            System.out.println("確認用の指令を表示しています。");
        }

        System.out.println("任務確認プログラムを終了します。");
    }
}

このプログラムでは、num が 5 のときに、ブロック内の2つの文が実行されます。

if(num == 5){
    System.out.println("第五任務が選ばれました。");
    System.out.println("確認用の指令を表示しています。");
}

条件が true の場合、2つの文が上から順番に実行されます。

条件が false の場合、2つの文はどちらも実行されません。

Sample2.java で5を入力した場合

5 を入力した場合、num == 5 は true になります。

実行例は次のようになります。

任務番号を入力してください。
5
第五任務が選ばれました。
確認用の指令を表示しています。
任務確認プログラムを終了します。

この場合、ブロック内の2つの文が実行されています。

入力値条件 num == 5ブロック内の処理
5true2文とも実行される

ブロックを使うことで、条件が true のときに複数の処理をまとめて実行できます。

Sample2.java で5以外を入力した場合

9 を入力した場合、num == 5 は false になります。

実行例は次のようになります。

任務番号を入力してください。
9
任務確認プログラムを終了します。

この場合、ブロック内の2つの文はどちらも実行されません。

入力値条件 num == 5ブロック内の処理
9false2文とも実行されない

ただし、最後の文は if文の外にあるため、必ず実行されます。

System.out.println("任務確認プログラムを終了します。");

ブロックの役割

ブロックの役割は、複数の文をひとまとまりとして扱うことです。

if(num == 5){
    System.out.println("第五任務が選ばれました。");
    System.out.println("確認用の指令を表示しています。");
}

この場合、{ } の中にある2つの文が if文の対象になります。

場所if文の対象か
{ } の中対象
{ } の外対象外

ブロックがあることで、「この範囲を if文の中として扱ってください」とJavaに伝えられます。

ブロックを付けないとどうなるのか

if文で複数の文を実行したいときに、ブロックを付け忘れると意図しない動きになることがあります。

if(num == 5)
    System.out.println("第五任務が選ばれました。");
    System.out.println("確認用の指令を表示しています。");

見た目では2つの文が if文の中にあるように見えるかもしれません。

しかし、Javaではそう判断されません。

if文の対象になるのは、直後の1文だけです。

そのため、

System.out.println("確認用の指令を表示しています。");

こちらは if文の外として扱われます。

つまり、num が 5 でなくても毎回表示されます。

文if文の対象か実行される条件
第五任務が選ばれました。対象num == 5 が true のときだけ
確認用の指令を表示しています。対象外常に実行される

これはとても間違えやすいポイントです。

人間はインデントを見て「ここまでが if文 の中だろう」と考えがちです。

しかし、Javaはインデントではなく文法で判断します。

複数の文を if文 の対象にしたい場合は、必ず { } を使います。

インデントを使って読みやすくする

インデントとは、処理のまとまりが見やすくなるように字下げすることです。

たとえば、次のように書くと、if文の中の処理が分かりやすくなります。

if(num == 5){
    System.out.println("第五任務が選ばれました。");
    System.out.println("確認用の指令を表示しています。");
}

インデントそのものに文法上の意味はありません。

しかし、コードの読みやすさに大きく関わります。

書き方読みやすさ
インデントが整っている処理のまとまりが分かりやすい
インデントが乱れているどこまでが if文 なのか誤解しやすい

実務では、1文だけでもブロックを書くスタイルがよく使われます。

if(num == 7){
    System.out.println("特別任務の札です。慎重に進みましょう。");
}

この書き方なら、あとから処理を追加したくなったときも安全です。

セミコロンの位置に注意する

if文を書くときは、セミコロンの位置にも注意が必要です。

正しい書き方は次のようになります。

if(num == 7)
    System.out.println("特別任務の札です。慎重に進みましょう。");

このとき、if の条件を書いた行にはセミコロンを付けません。

行セミコロン
if(num == 7)付けない
System.out.println(...);付ける

if文の条件部分にセミコロンを付けてしまうと、思った通りに動かなくなることがあります。

if文の条件行にセミコロンを付けるとどうなるか

次のような書き方は注意が必要です。

if(num == 7);
    System.out.println("特別任務の札です。慎重に進みましょう。");

このコードは、コンパイルエラーにならないことがあります。

しかし、意図した動きにはなりません。

理由は、次の部分で if文の対象が空の文になってしまうからです。

if(num == 7);

このセミコロンだけで、if文の対象が終わった扱いになります。

そのため、次の文は if文とは関係なく、毎回実行されます。

System.out.println("特別任務の札です。慎重に進みましょう。");

つまり、num が 7 でも 7 でなくても、メッセージが表示されてしまいます。

書き方動き
if(num == 7) System.out.println(...);num == 7 が true のときだけ表示
if(num == 7); System.out.println(...);条件に関係なく表示される

これは見つけにくいミスなので、if文を書いたら余計なセミコロンがないか確認する習慣が大切です。

図:if文のセミコロンミス

この図が示していること

この図では、if文の条件行に余計なセミコロンを付けると、意図しない動きになることを示しています。

左側の正しい書き方では、条件が true のときだけ処理が実行されます。

右側の誤った書き方では、if文の対象が空になってしまうため、その後の文が条件に関係なく毎回実行されます。

ここから分かることは、if文ではセミコロンの位置が非常に重要だということです。

if文を読むときのポイント

if文を読むときは、次の順番で確認すると分かりやすくなります。

確認すること見るポイント
条件は何かif の丸かっこの中を見る
true のとき何をするかif文の対象になっている文を見る
false のときどうなるか対象の文を飛ばして次へ進む
複数文があるか{ } の範囲を見る
セミコロンが正しいかif の条件行に余計な ; がないか確認する

たとえば、次のコードを見るときは、

if(num == 7)
    System.out.println("特別任務の札です。慎重に進みましょう。");

System.out.println("任務札の確認が終わりました。");

まず条件を見ます。

num == 7

次に、true のときに実行される文を見ます。

System.out.println("特別任務の札です。慎重に進みましょう。");

最後に、if文の外にある文を確認します。

System.out.println("任務札の確認が終わりました。");

この流れで読むと、どの処理が条件付きで、どの処理が常に実行されるのかが分かりやすくなります。

if文を理解するための重要ポイント

if文を学ぶときは、次の点を押さえておくと理解しやすくなります。

ポイント内容
条件は true または false になるif文は条件の結果で動く
true のときだけ実行されるfalse のときは対象の処理を飛ばす
false でもプログラム全体は止まらないif文の次の処理へ進む
ブロックを使えば複数文をまとめられる{ } の中がひとまとまりになる
ブロックがないと直後の1文だけが対象インデントだけでは範囲を指定できない
if の条件行にセミコロンを付けない余計な ; は誤動作の原因になる
1文でもブロックを書くと安全あとから処理を追加しやすい

if文は短い構文ですが、プログラムの流れを変える大きな力を持っています。

if文は条件分岐の第一歩

if文は、Javaで条件分岐を学ぶための最初の基本です。

条件が true のときだけ処理を実行する。
条件が false なら処理を飛ばして次へ進む。

この考え方が、これから学ぶ if~else文 や if~else if~else文 の土台になります。

構文役割
if文true のときだけ処理する
if~else文true と false のときで処理を分ける
if~else if~else文複数の条件を順番に調べる

まずは、「条件が true のときだけ実行する」という感覚をしっかり身につけることが大切です。

ドラゴンボール風にたとえると、if文は「条件がそろったときだけ発動する基本の型」です。

この型を理解できると、複数条件を組み合わせた応用の型にも進みやすくなります。