if文
if文による条件分岐
Javaには条件分岐のための構文としてif文(if statement)とswitch文(switch statement)があります。 まずはif文について解説していきましょう。
英語のifは、「もし〜ならば」という意味です。
一般に、if文は次のような構文になります。
構文 : if文
if (条件) 文
そして、これがそのフローチャート(流れ図)です。

この構文では、条件がtrueの場合に文が実行され、falseの場合には実行されません。
では、if文を使ったサンプルコードを見てみましょう。
IfSample01.java
import java.io.*; class IfSample01 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("得点を入力してください。"); int point = Integer.parseInt(br.readLine()); if(point >= 80) System.out.println("合格です。"); System.out.println("合格発表を終わります。"); } }
IfSample01は、ユーザーが試験の得点を入力すると合格判定をしてくれるプログラムです。 試験は100点満点で、80点以上が合格という想定です。
このコードで重要なのは次の部分です。
if(point >= 80) System.out.println("合格です。");
条件が point >= 80 となっていますので、pointの値が80より大きいか等しい(80以上)ときにtrueとなり、
System.out.println("合格です。");
という文が実行されることになります。
IfSample01を実行すると、「得点を入力してください。」と表示されますので、試しに「80」と入力すると、次のような結果になります。
IfSample01の実行結果 1
得点を入力してください。 80 合格です。 合格発表を終わります。
では、「79」と入力してみるとどうでしょうか。
IfSample01の実行結果 2
得点を入力してください。 79 合格発表を終わります。
80以上が合格ですから、80はぎりぎりの合格だったわけです。 80未満は不合格なわけですが、不合格を知らせるメッセージは表示されません。 また、100点満点を想定していますが、実際には100を超える得点や、マイナスの得点を入力しても、かまわず合否判定してしまいます。 本来なら、そういう想定範囲外の数値が入力された場合は、何らかのエラーメッセージを出したいところです。 それについては後ほど考えましょう。
さて、ここでIfSample01のコードに1文字だけ追加してみましょう。
IfSample01A.java
import java.io.*; class IfSample01A { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("得点を入力してください。"); int point = Integer.parseInt(br.readLine()); if(point >= 80); System.out.println("合格です。"); System.out.println("合格発表を終わります。"); } }
どこが変わったかお分かりになりますか。 コンパイルはできますが、結果は次のようになります。
IfSample01Aの実行結果
得点を入力してください。 70 合格です。 合格発表を終わります。
70で合格とは変ですね。IfSample01との違いは、
if(point >= 80);
の部分だけです。そう、if(条件)の後に;(セミコロン)が付いているのです。 こうすると、if(条件)の部分と関連付けられるのは ; という文になってしまいます。 なんと、 ; は何もしないけれど、空文(empty statement)と呼ばれる立派な文なのです。このため、
System.out.println("合格です。");
という文は、if(条件)の部分と無関係ということになり、無条件に実行されてしまいます。 その結果、条件がfalseでも、「合格です。」と表示されてしまうのです。 このような間違いは、初心者にはありがちですので、注意しましょう。
if(条件)の直後に;(セミコロン)を付ける必要は無い。
ブロックを使って複数の文を実行する
IfSample01では、条件がtrueの場合に
System.out.println("合格です。");
という文だけを実行していましたが、複数の文を実行するにはどうすればいいのでしょうか。
第3章の「Javaプログラムの構成」で説明したブロックを思い出してください。 {から}までのかたまりをブロックと呼ぶのでしたね。 ブロック内の文は上から順番に実行されていきます。
条件がtrueのときに複数の文を実行するためには、if(条件)の後にブロックを置いて、そのブロックの中に、実行したい複数の文を書けばよいのです。
構文 : 複数の文を実行するif文
if (条件){ 文1 文2 ... }

この構文では、条件がtrueの場合に文1、文2、...と順番に実行されていきます。
ブロックの中の文は1つだけでもかまいません。 実行したい文が1つだけの場合でも、ブロックを使った書き方をお薦めします。 一貫性のある書き方をした方が、コードが読みやすくなるからです。 ただし、本講座では、コードの行数を減らすために、文が1つだけの場合はブロックに入れないときもあります。
IfSample02.java
import java.io.*; class IfSample02 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("得点を入力してください。"); int point = Integer.parseInt(br.readLine()); if(point >= 80){ System.out.println("合格です。"); System.out.println("おめでとうございます。"); } System.out.println("合格発表を終わります。"); } }
IfSample02では条件がtrueの場合に、
System.out.println("合格です。"); System.out.println("おめでとうございます。");
という2つの文が実行されることになります。
IfSample02を実行して、80以上を入力してみると、
IfSample02の実行結果 1
得点を入力してください。 90 合格です。 おめでとうございます。 合格発表を終わります。
そして、80未満の場合は、相変わらず次のようになります。
IfSample02の実行結果 2
得点を入力してください。 70 合格発表を終わります。
if(条件)と複数の文を関連づけるにはブロックを使う。