条件分岐(if文 if-else文)

参考:教科書 p109-p145

子供のころ、自分で話の進路を選択できる本を読んだことは無いだろうか?
このような本は数ページごとに分岐点があり、そのページには
「もし主人公がドアを開ける場合は、ページ123へ行け」
「もし主人公が階段を上る場合は、ページ158へ行け」
等と書いてあり、その時々に読者が選択した行動により、話の流れが変り、 ハッピーエンドにもバッドエンドにもなるような種類の本である。
このような本はまさに条件分岐の制御構造からなる本である。

Javaでは、条件分岐にif文(if-else文)とswitch文がある。ここでは、基本となるif文について演習する。

条件分岐を使うと「条件が成り立てば処理Aを実行し、成り立たなければ処理Bを 実行する」といったことをプログラムとして書ける。
Javaでは条件を式で表現し、処理Aや処理Bを文で表現する。
if文(if-else文)の流れ図(模式図)は、以下である。
図1 条件分岐
if文
図2 条件分岐
if-else文

菱型の図形が分岐処理(if)を表し、この中に条件を表す を示す。
評価結果が true ならば true の矢印をたどり を実行する。
評価結果が false ならば false の矢印をたどり を実行する。
if文とif-else文の違いは、falseの結果の処理が別途存在するかどうかのみである。

if文

if文の構文は以下である。
参考:教科書 p114-p120

if ( 式 ) 文

ただし、式の計算結果は論理値(trueまたはfalse)でなければいけない。
式に利用できる関係演算子論理演算子などは、Javaの演算の演習ページを参考にせよ。

if文の例1
int a = -10;
if (a < 0) a=-a; // a の値が負なら符合を反転 (つまり絶対値を計算)
System.out.println(a); // 絶対値を表示
a の値が負ならば、a = -a が実行される。a の値が 0 以上ならば、 何もせず次にいく。つまり、a の絶対値を計算するプログラム(の一部)である。

では、if文の条件が真の場合実行される処理に複数の文を書きたい場合はどうするのか?
参考:教科書 p119
if文の条件が真の場合実行されるのは一つの のみだが、 ブロック は全体で一つの文として扱われるため、 ブロックを利用することにより、複数の文をif文で指定できる。

ブロックの構文

{ 文1 文2 ... 文n}

ブロックを指定するためには、ブレース { } で複数の文を囲むだけで良い。ブロックの中の文は順次実行される。 ブロックを利用する時は、プログラムを見易くするために、正しくインデントを行うことに注意する。

if文の例2 (ブロックを利用)
int a = -10;
if (a < 0) { // ブロック始まり
    a = -a;  // a の値が負なら符合を反転 (つまり絶対値を計算)
    System.out.println("負の値のため、符合を反転");
} // ブロック終り
System.out.println(a); // 絶対値を表示

if文の文にブロック(ブレース)を初めから入れていない場合、後から文を加え たときにブレースをつけ忘れるとプログラムが意図とは異なるプログラムになる ため、if文ではなるべくブレースを付けることが推奨される。

if-else文

if-else文の構文は以下である。
参考:教科書 p121-p124

if ( 式 ) 文1 else 文2

ただし、式の計算結果は論理値(trueまたはfalse)でなければいけない。

if-else文の例1
/*変数aの値は偶数か奇数かを判断してメッセージを出力する。*/
int a = 10;
if (a % 2 == 0) { // a を 2 で割ったあまりが0ならば
    System.out.println(a+"は偶数"); // 2でぴったり割れたので偶数
} else {
    System.out.println(a+"は奇数"); // あまりが出たので奇数
}

if-else文の例2
/*変数aと変数bで、値の大きい方を変数maxに代入する。*/
int a = 10;
int b = 12;
int max;
if (a > b) {
    max = a; // a の方が大きい
} else {
    max = b; // b の方が大きい、または a と等しい
}
System.out.println(max);


東京情報大学情報システム学科
マッキン ケネス(Ken Mackin)
mackin