Java入門|if文のしくみと使い方

条件しだいで動きが変わる。if文を覚えると、Javaはもっと便利になる

ここまでで、Javaでは条件が true または false になること、そしてその条件を関係演算子で表せることを学びました。ここからは、その条件を使って、実際に処理の流れを変える方法を見ていきます。

その最初の一歩になるのが、if文です。

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

プログラムでは、「特定の値が入力されたときだけメッセージを表示したい」「ある条件を満たしたときだけ処理を行いたい」といった場面がよくあります。そんなとき、if文を使うことで、必要な場面だけ処理を動かせるようになります。

if文は条件判断文の中でも特に基本となる構文です。ここをしっかり理解すると、このあとに学ぶ if~else文 や if~else if~else文 もぐっとわかりやすくなります。まずは、if文の基本の形からやさしく確認していきましょう。

if文とは何か

if文は、条件が true のときにだけ文を実行する構文です。
書き方はとてもシンプルです。

if(条件)
    文;

この形では、条件が true だった場合だけ、次の1文が実行されます。
条件が false の場合は、その文は実行されず、そのまま次の処理へ進みます。

言い換えると、if文は「もし~なら実行する」という考え方そのものです。

たとえば、

  • もし点数が80点以上ならメッセージを表示する
  • もし入力された数が5なら確認メッセージを出す
  • もし会員番号が一致したら先へ進む

このような処理は、すべて if文 で表せます。

if文の流れをイメージしよう

if文の動きを言葉で表すと、次のようになります。

  • 条件を調べる
  • true なら指定した文を実行する
  • false ならその文を飛ばして次へ進む

この流れを頭の中でしっかり持っておくと、コードを読んだときにも理解しやすくなります。

この図では、if文の最も大切なポイントを表しています。
それは、条件が true のときだけ文が実行されるということです。

条件が false の場合には、if文の中の処理は行われません。
何か別の処理をするわけではなく、その部分を飛ばして次の処理へ進むだけです。

この「true のときだけ実行する」という感覚が、if文を理解する上でいちばん大切です。

日常の例をif文で考える

日常の例に置き換えると、if文はとてもわかりやすくなります。

たとえば、

「よい成績をとったら、旅行に行く」

という考え方があるとします。
これを if文 の形で表すと、イメージとしては次のようになります。

if(よい成績をとった)
    旅行に行く

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

つまり、条件である「よい成績をとった」が true なら、「旅行に行く」が実行されます。
false なら、「旅行に行く」は実行されません。

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

サンプルプログラムでif文を見てみよう

では、実際のJavaプログラムで 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 のときだけ、
ラッキーセブンですね。
というメッセージが表示されます。

そのあとで、
入力の確認が終わりました。
というメッセージが表示されます。

Sample1.java の流れを丁寧に見てみよう

このプログラムは、次の順番で動きます。

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

特に注目したいのは、4番目から5番目の流れです。
if文は、この部分で条件を判定しています。

if(num == 7)
    System.out.println("ラッキーセブンですね。");

この条件が true なら、次の1文が実行されます。
false なら、その文は実行されずに飛ばされます。

条件がtrueだった場合の実行例

たとえば、ユーザーが 7 を入力したとします。
すると、条件 num == 7 は true になります。

その結果、if文の中の文が実行されます。

実行例

好きな数字を1つ入力してください。
7
ラッキーセブンですね。
入力の確認が終わりました。

この実行結果を見ると、条件が true だったので、if文の中のメッセージがきちんと表示されていることがわかります。

条件がfalseだった場合の実行例

では、7以外の数字を入力した場合はどうなるでしょうか。
たとえば 3 を入力してみます。

このとき、num == 7 は false になります。
そのため、if文の中の文は実行されません。

実行例

好きな数字を1つ入力してください。
3
入力の確認が終わりました。

このように、if文の中のメッセージは表示されません。
ただし、その次の

System.out.println("入力の確認が終わりました。");

は、if文の外にあるので必ず実行されます。

ここはとても大事なポイントです。
if文は、条件が false のときにプログラム全体を止めるわけではありません。if文の対象になっている文だけを実行しないのです。

この図では、true の場合と false の場合の流れを見比べられるようにしています。

  • true の場合は、if文の中の表示処理が行われる
  • false の場合は、その処理を行わずに次へ進む

そして、どちらの場合でも最後には
入力の確認が終わりました。
の表示へ進みます。

このように、if文は処理の一部だけを条件つきで実行するための仕組みだと考えると理解しやすいです。

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

これまで見てきた if文 では、条件が true のときに1文だけを実行していました。
しかし実際には、条件が true のときに複数の処理をまとめて行いたいこともよくあります。

そんなときは、ブロックを使います。
ブロックは { } で囲んだ部分のことです。

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

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

このように書くと、条件が true のときに、ブロックの中の文が上から順番に実行されます。
false のときは、ブロック全体が実行されません。

複数の文を実行するサンプル

では、複数の文を処理する if文 の例も見てみましょう。
今回は、入力された整数が 5 だった場合に、2つのメッセージを表示するプログラムを作成します。

ファイル名: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("5が入力されました。");
            System.out.println("確認用メッセージを表示しています。");
        }

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

Sample2.java の実行結果を見てみよう

5を入力した場合

数字を入力してください。
5
5が入力されました。
確認用メッセージを表示しています。
プログラムを終了します。

この場合、num == 5 が true なので、ブロック内の2つの文が順番に実行されています。

5以外を入力した場合

数字を入力してください。
9
プログラムを終了します。

この場合は条件が false なので、ブロックの中にある2つの文はどちらも実行されません。
そのまま次の処理へ進み、最後のメッセージだけが表示されます。

ブロックの役割を整理しよう

ブロックを使う理由は、複数の文をひとまとまりとして扱うためです。

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

この違いはとても重要です。
見た目が少し違うだけに見えますが、実際の動きは大きく変わります。

ブロックにしないとどうなるのか

ここは初心者の方がとてもつまずきやすいところです。
if文のあとに複数の文を書いたつもりでも、ブロックをつけないと、if文の対象になるのは次の1文だけです。

たとえば、次のコードを見てください。

import java.io.*;

class Sample
{
    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("5が入力されました。");
            System.out.println("確認用メッセージを表示しています。");

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

一見すると、num == 5 のときに2行とも表示されそうに見えるかもしれません。
ですが、実際には違います。

if文に含まれるのは、次の1文だけです。
つまり、このコードでは if文の対象は次の文だけです。

System.out.println("5が入力されました。");

その次の

System.out.println("確認用メッセージを表示しています。");

は、if文の外の処理として毎回実行されます。

そのため、たとえば 2 を入力すると

数字を入力してください。
2
確認用メッセージを表示しています。
プログラムを終了します。

という、少し不自然な結果になります。

なぜこのようなことが起こるのか

理由はシンプルです。
Javaでは、ブロックがない if文 は、直後の1文だけを対象にするからです。

人間は見た目の字下げで「ここまでがif文だろう」と思ってしまいがちですが、コンパイラは字下げではなく文法で判断します。
そのため、{ } がなければ、2行目以降は if文 に含まれません。

このようなミスを防ぐためには、複数の文を実行したいときには必ずブロックを書くことが大切です。

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

if文では、処理のまとまりが見やすいように**字下げ(インデント)**を使うことがとても大切です。

たとえば、次のように書くと、どこが if文 の中なのかがわかりやすくなります。

if(num == 5){
    System.out.println("5が入力されました。");
    System.out.println("確認用メッセージを表示しています。");
}

インデントには文法上の意味はありませんが、読みやすさには大きく影響します。
特に条件分岐は、処理のまとまりが見えにくくなりやすいので、見た目を整えて書く習慣をつけることが大切です。

また、実務でも学習でも、1文だけでもブロックを書くスタイルがよく使われます。
そのほうがあとから文を追加しやすく、読み間違いも減らせるからです。

たとえば、次のように書く方法です。

if(num == 7){
    System.out.println("ラッキーセブンですね。");
}

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

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

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

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

if(num == 7)
    System.out.println("ラッキーセブンですね。");

このとき、if の条件を書いた行の末尾にはセミコロンをつけません。
セミコロンをつけるのは、実行する文の末尾です。

つまり、

  • if(num == 7) の行にはセミコロンをつけない
  • System.out.println(...) の行にはセミコロンをつける

ということです。

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

初心者の方がうっかりやってしまいやすいのが、次のような書き方です。

if(num == 7);
    System.out.println("ラッキーセブンですね。");

このコードはコンパイルエラーにはならないことがあります。
ですが、思った通りには動きません。

なぜなら、

if(num == 7);

の部分で、if文 の対象が「空の文」になってしまうからです。
その結果、次の System.out.println(...) は if文 と関係なく、毎回実行されることになります。

つまり、条件に関係なくメッセージが出てしまうのです。

これは見つけにくいミスなので、if文を書いたら「条件の行にセミコロンをつけていないか」を確認する癖をつけると安心です。

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

if文を学ぶときは、次の点をしっかり意識すると理解しやすくなります。

ポイント内容
条件はtrueかfalseになるif文は条件の結果で動く
trueのときだけ実行されるfalseなら飛ばして次へ進む
ブロックを使えば複数文をまとめられる{ } の中がひとまとまりになる
ブロックがないと次の1文だけが対象見た目だけでは判断されない
条件の行にセミコロンをつけない余計なセミコロンは誤動作の原因になる

if文は条件分岐の第一歩

if文は、条件によって処理を変えるための最初の基本構文です。
ここで学んだことは、この先に出てくる if~else文 や if~else if~else文 を理解するための土台になります。

まずは、次のような考え方をしっかり身につけることが大切です。

  • 条件が true のときだけ処理をしたいなら if文 を使う
  • 複数の処理を行うなら { } でブロックを作る
  • 見た目だけでなく、文法としてどこまでが if文 なのかを意識する
  • セミコロンの位置を丁寧に確認する

if文は短い構文ですが、プログラムの流れを変える大きな力をもっています。
ここをしっかり理解しておくと、Javaでできることが一気に広がっていきます。

必要であれば次に続けて、この流れのまま if~else文のしくみと使い方 も同じ文体で詳しく作成できます。