先頭に戻る

3.プログラムの流れ

3-1 「制御文とは何か」

はじめに

プログラムの流れを制御するために、制御式というものを使います。制御されたプログラムの流れは、ある処理を繰り返す、 条件によって異なる処理を行うなど、条件が成り立つかどうかで決まります。少しむずかしいと思いますのでまずは下の動画を確認してから勉強していきましょう。 この章では、ある条件に一致した場合に、特定の処理を行うときに使われる、if文、switch文についての解説をしていきます。


制御式には種類があります。それを一つ一つ見ていきましょう。


if文

キーボードから数値を読み込み、その値が0より大きければ「その値は正です。」と表示するプログラムを学習します。
まずは、「値が0より大きい場合」と、「0よりも小さい場合」の動きをフローチャートから読み取り、プログラムをどう書けばいいのか考えてみましょう。

上のフローチャートから分かるように、入力された値が、0よりも大きければ、「その値は正です。」と表示され、それ以外の時は何も表示されません。
このことを踏まえ、実際にプログラムを考えてみましょう。

Hantei.java


// 読み込んだ整数値は正の値か? import java.util.Scanner; class Hantei { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("整数値:"); int n = stdIn.nextInt();

if (n > 0) System.out.println("その値は正です。");

} }
実行結果1

整数値:15
その値は正です。
実行結果2

整数値:-5

オレンジは入力した値


解説

ピンク色で囲まれた部分が今回学習するif文です。 if文を利用する時には「if (式) 文」というように記述します。今回の場合は、「if (n > 0)」と 記述しています。ifは「もしも~」という意味で、式の値を比べその値ががtrue(真)になった時に 次の処理を行います。今回の場合だと、if文がtrueの場合、「その値は正です。」と表示されます(結果1)。

※補足 「int n = stdIn.nextInt();」という文があるが、これは、キーボードからint型の整数値を読み込むためのもの。 このようにすることで、変数nを生成すると同時に、キーボードから読み込んだ整数値で初期化することができる。 整数値として打ち込んだ値がnという箱に格納されていると考えれば良い。

重要

演算子「>」のような大小関係を判定する演算子を関係演算子といいます。関係演算子には以下の種類があります。

x < y xがyより小さければtrueを、そうでなければfalseを生成
x > y xがyより大きければtrueを、そうでなければfalseを生成
x <= y xがyより小さいか、等しければtrueを、そうでなければfalseを生成
x >= y xがyより大きいか、等しければtrueを、そうでなければfalseを生成


また、左右のオペランドが等しいかどうかを判断する等価演算子というものもあります。例えば、「if (a == b)」という式なら、aとbが正しいかどうかの判断をします。 等価演算子には以下の種類があります。

x == y xがyより等しければtrueを、そうでなければfalseを生成
x != y xがyより等しくなければtrueを、そうでなければfalseを生成


if-else文

先ほどのプログラムだと、正の値の場合と「その値は正です。」と表示されますが、負の値が入力された場合、 0が入力された場合は何も表示することなく、プログラムが終了します。そこで、「if-else文」を使い、このプログラムを改良してみましょう。

Hantei2.java


// 正/負/0を判定して表示 import java.util.Scanner; class Hantei2 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("整数値:"); int n = stdIn.nextInt();

if (n > 0)・・・① System.out.println("その値は正です。"); else if (n < 0)・・・② System.out.println("その値は負です。"); else・・・③ System.out.println("その値は0です。");

} }
実行結果1

整数値:15
その値は正です。
実行結果2

整数値:-5

その値は負です。
実行結果3

整数値:0

その値は0です。

オレンジは入力した値


解説

このように、「else」という文を使うことにより、複数の条件式を組み合わせることができるようになります。 「else」には~でなければという意味があり、制御式の値が正しければ先頭側の文を実行し、 正しくなければ末尾側の文が実行されます。

今回のプログラムだと、最初のif文で、nが0より大きいかを判定しています。実行結果1のように、 整数値に0より大きい数値を打ち込むと、「その値は正です。」と表示され、下に書かれているelse文を実行することなく、 プログラムを終了します。(・・・①部分の説明)

入力された値が、正の値ではなかった時のみ、次のelse文に進みます。(・・・②部分) 正の整数ではない場合、「負」の場合と「0」の場合の2つの可能性があります。そこで、elseにifを足しelse ifとし、 さらに条件式を書きます。今回は、「else if (n < 0)」とし、整数値が負の値だった場合の条件式を書いています。 このことにより、実行結果2のように負の値が入力されると、「その値は負です。」と表示されます。入力された値が負の値だった場合、次のelse文には 進まず、プログラムは終了されます。

入力された値が、正でも負でもない場合・・・③の条件式に移ります。ここの条件式に辿り着いたということは、 「0」と入力せれた以外に当てはまりません。そのため、先ほどの・・・②のように「else if」とし、条件式を書く必要はなく、 「else」と書くだけで成り立ちます。「0」と入力された場合は、実行結果3のようにになります。


switch文

条件文には「if文」の他にもswitch文というものがあります。この章では「switch文」について学習していきましょう。 まずは、このプログラムを見てみましょう。


Hyouka.java


// 読み込んだ値に応じて評価する import java.util.Scanner; class Hyouka { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("評価(0…満足"/1…不満"/2…その他):"); int x = stdIn.nextInt();

if (x == 0) System.out.print("満足"); else if (x == 1) System.out.print("不満"); else if (x == 2) System.out.print("その他");

} }
実行結果

評価(0…満足/1…不満/2…その他):0
満足

オレンジは入力した値


このプログラムは先ほど学習した「if文」を用いたプログラムで、入力された値に応じて文章が表示される というものです。このプログラムを「switch文に」書き換えることができます。書き換えると次のようなプログラムになります。


Hyouka2.java


// 読み込んだ値に応じて評価する import java.util.Scanner; class Hyouka2 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("評価(0…満足"/1…不満"/2…その他):"); int x = stdIn.nextInt();

switch (x) { case 0: System.out.print("満足"); break; case 1: System.out.print("不満"); break; case 2: System.out.print("その他"); break;

} } }
実行結果

評価(0…満足/1…不満/2…その他):0
満足

オレンジは入力した値


解説

ピンク色で囲まれている部分が「if文」から「switch文」に書き換えられた部分です。 「switch文」はその名の通り切り替えスイッチのようなものです。「if文」の部分では「x == 」と何度も書いたり、制御式が間違えていないか確認しなけれなりませんが、 「switch文」ではそれを簡潔に表現することができます。

プログラムの流れがswitch文に差しかかると( )内に書かれた制御式が実行されます。 (今回の場合だと、switch(x)の部分)。実行結果のように、「0」と入力された場合は、「case 0:」という部分に移り、「満足」と表示され、 「break」というbreak文が実行されswitch文から抜け出します。


重要

switch文に使われる「case: 0」や「case: 1」は、「ラベル」と呼ばれています。 これは、プログラムの飛ぶ先を示しています。例えば、0」と入力されれば、「case: 0」の後に書かれた文章が、 1」と入力されれば「case: 1」の後に書かれた文章が表示されます。

また、switch文には「break」というものが使われています。これは、break文と呼ばれるもので、、break文に達すると、switch文の実行は終了します。 例えば、実行結果のように「0」が入力された場合、「case: 0」に飛び、「満足」と表示された後にbreak」にたどりつき、switch文を終了します。

ちなみに、今回のプログラムが、

Hyouka2.java


// 読み込んだ値に応じて評価する import java.util.Scanner; class Hyouka2 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("評価(0…満足"/1…不満"/2…その他):"); int x = stdIn.nextInt();

switch (x) { case 0: System.out.print("満足"); case 1: System.out.print("不満"); break; case 2: System.out.print("その他"); break;

} } }

のように、「case: 0」の部分の「break文」が抜けている時に、「0」が入力されると、「満足」が表示されますが、 「break文」が無く、switch文から抜けることができません。そのため、次の「case: 1」に飛び、「case: 1」の文章が表示されることになります。 そのため、実行結果は「満足不満」 となります。「case: 1」には「break文」があるので、ここでswitch文を抜けることができます。