制御文(条件分岐)[if, else, else if, switch]
はじめに
みなさんは日々の生活の中でいくども 選択 に迫られたことがあるかと思います。
もし あのときあの人に想いを告げていれば、、、なんて。
そんな タラレバ を1度や2度は経験していることでしょう。
(筆者はタラレバしたくないので勇気振り絞る派です。笑)
今回はそんなタラレバな生活が制御構文の学習に役立つことでしょう!
Step1: 概念を知る
制御構文は一言で言うと、 プログラムを制御する文のこと です。
「分岐」と「繰返し」の2つに分類でき、
「分岐」には、if文とswitch文の2つの構文、
「繰返し」には、for文とwhile文、do-while文の3つの構文が存在します。
(※ 繰返し に関しては次章で解説します。)
以下より、 if文 、 switch文 に分けて解説していきます。
Step2-1:【分岐の制御①】 if文
if文 は、括弧の中の条件によって処理の流れを分岐させます。
以下の文では、括弧の中の条件式の判定結果が true
(真) の場合のみ、{ }
の中に記述されている処理が実行されます。
条件式の判定結果が false
(偽) の場合、{ }
の中の処理は実行されません。
if (条件式) { ・・・ 条件式が true の場合に行う処理 ・・・ }
Step2-2: else文
else文 は、「それ以外」の場合に実行する処理を記述します。
つまり、if文の条件式の判定結果が false
だった場合に、else文の { }
内の処理が実行されます。
if (条件式) { ・・・ 条件式が true の場合に行う処理 ・・・ } else { ・・・ 条件式が true でなかった場合(=falseの場合)に行う処理 ・・・ }
Step2-3: else if文
else-if文 は、「それ以外」で更に別の条件を判定する場合に使用します。
つまり、if文の条件式の判定結果が false
だった場合に、else-if文の条件式の判定が行われます。
そして、else-if文の条件式の判定結果が true
だった場合に、else-if文の { }
内の処理が実行されます。
if (条件式1) { ・・・ 条件式1が true の場合に行う処理 ・・・ } else if (条件式2) { ・・・ 条件式1が false で、条件式2が true の場合に行う処理 ・・・ }
Step2-4: if, else, else if文(組み合わせ)
if文、else-if文、else文を組み合わせると、以下のようになります。
if (条件式1) { ・・・ 条件式1が true の場合に行う処理 ・・・ } else if (条件式2) { ・・・ 条件式1が false で、条件式2が true の場合に行う処理 ・・・ } else if (条件式3) { ・・・ 条件式1と条件式2が false で、条件式3が true の場合に行う処理 ・・・ } else { ・・・ 上記の条件式1~3が全て false の場合に行う処理 ・・・ }
例題
【if文を使ったプログラム例】
下のプログラムでは、飲酒可能かどうかの判定をしてます。
もし20歳以上だった場合は「酒が飲めるぞ!」と表示します。
もし19歳だった場合は「あと1年で酒が飲める!!」と表示します。
それ以外(18歳以下だった場合)は「まだまだ酒は飲めない・・・」と
表示するプログラムです。
今回は old 変数に 25 (25歳)を代入しています。
// int型の変数oldに25を代入 int old = 25; // もし、20歳以上の場合は、"酒が飲めるぞ!"と表示 if (old >= 20) { System.out.println("酒が飲めるぞ!"); // でももし、19歳の場合は、"あと一年で酒が飲める!!"と表示 } else if (old == 19) { System.out.println("あと1年で酒が飲める!!"); // それ以外の場合は、"まだまだ酒が飲めない・・・"と表示 } else { System.out.println("まだまだ酒は飲めない・・・"); }
解説
今回のif文の条件(old >= 20
)は、
old > 20 && old == 20
という条件を省略した書き方です。
※&&
については Step2-5: 複数条件の分岐の論理演算子 の項目で説明しております。
【実行結果】
酒が飲めるぞ!
【if文を使ったプログラム例(文字列の比較)】
下のプログラムでは、文字列の比較をしています。
もし国名がAmericaだった場合は「アメリカ合衆国」と表示します。
もし国名がJapanだった場合は「日本」と表示します。
それ以外は「その他」と表示するプログラムです
今回は Stringクラスの 変数に America を代入しています。
※Stringクラスの比較の場合、==
ではなく equals
を使用します。
// Stringクラスの変数countryに"America"を代入 String country = "America"; // もしcountryが"America"の場合、"アメリカ合衆国"と表示 if (country.equals("America")) { System.out.println("アメリカ合衆国"); // でももし、countryが"Japan"の場合、"日本"と表示 } else if (country.equals("Japan")) { System.out.println("日本"); // それ以外の場合、"その他"と表示 } else { System.out.println("その他"); }
【実行結果】
アメリカ合衆国
Step2-5: 複数条件の分岐
条件文を複数にしたいときもあります。
例えば、年齢が25歳未満で学生であれば、学割パックが使えます、としましょう。
// 年齢 int age = 24; // 学生かどうか boolean is_student = true;
複数条件を指定する場合には 論理演算子 を使用します。
演算 | 演算記法 | 画像番号 | 説明 |
---|---|---|---|
AND 演算 | A && B |
① | AとB両方の条件を満たす場合に true |
OR 演算 | A || B |
② | AまたはBどちらかの条件を満たす場合に true |
NOT 演算 | A != B |
③ | AがBでない場合に true |
&&
、||
が代表的です。
|
の記号は馴染みがないかもしれませんが、Shift
+ ¥
で出せます。(設定を変更していなければ)
それでは、年齢が25歳未満で学生であれば、学割パックが使えます、という条件分岐を書いてみます。
// 年齢 int age = 24; // 学生かどうか boolean is_student = true; // もし、年齢が25歳未満 かつ 学生 の場合、"学割パックが使えるよ"と表示 if (age < 25 && is_student) { System.out.println("学割パックが使えるよ"); }
【実行結果】
学割パックが使えるよ
解説
&&
を使用することで、両方の条件を満たしていなければ「正しい」と判断しません。
逆に||
を使用することで、どちらか片方だけでも満たしていれば「正しい」と判断します。
実際に試して確認してみてください。
Step2-6: else if
さて、年齢が25歳未満で学生であれば、学割パックが使えますが、
学生でなくても25歳未満であれば、若者応援割引が使えるとします。
この場合、下記のように続けてかくことができます。
// 年齢 int age = 24; // 学生かどうか boolean is_student = false; // もし、年齢が25歳未満 かつ 学生 の場合、"学割パックが使えるよ"と表示 if (age < 25 && is_student) { System.out.println("学割パックが使えるよ"); // でももし、年齢が25歳未満の場合、"若者応援割引が使えるよ"と表示 } else if (age < 25) { System.out.println("若者応援割引が使えるよ"); }
【実行結果】
若者応援割引が使えるよ
解説
このelse if
はいくつでも書くことができます。
もし全ての条件に当てはまらなかったときの処理を記述する場合はelse
を使用します
Step3: 【分岐の制御②】 switch文
switch文は、括弧内の式によって処理の流れを分岐します。
ひとつの式の結果から多方向に分岐する、多分岐処理で使用します。
主な特徴、記述方法は以下のとおりです。
- 複数の
case
という選択肢を記述し分岐させる - 各々の
case
の最後にbreak文
を記述することで、処理中のcase
を終了してswitch文
から抜ける - どの
case選択肢
にも当てはまらない場合は、default
を記述することで、 if文のelse
と同等の機能を持たせる
以下に実際の書き方を提示します。
switch (式) { case 値1: ・・・ 式が 値1 の場合に行う処理 ・・・ break; case 値2: ・・・ 式が 値2 の場合に行う処理 ・・・ break; default: ・・・ 式が上記case選択肢のどれにも当てはまらない場合に行う処理 ・・・ break; }
switch文
の分岐には数値や文字が用いられることが多いですが、ここでは数値で分岐させているプログラム例を以下に示します。
例題
【switch文を使ったプログラム例】
int kubun = 2; switch (kubun) { case 1: System.out.println("kubunが1のときの処理を行います。"); break; case 2: System.out.println("kubunが2のときの処理を行います。"); break; case 3: System.out.println("kubunが3のときの処理を行います。"); break; case 9: System.out.println("kubunが9のときの処理を行います。"); break; default: System.out.println("kubunが想定外の値のときの処理を行います。"); break; }
【実行結果】
kubunが2のときの処理を行います。
(JDK1.7以降)
式及び値に文字列型が使用できるようになりました。
String color = "YELLOW"; switch (color) { case "RED": System.out.println("colorがREDのときの処理を行います。"); break; case "YELLOW": System.out.println("colorがYELLOWのときの処理を行います。"); break; case "GREEN": System.out.println("colorがGREENのときの処理を行います。"); break; default: System.out.println("colorが想定外の値のときの処理を行います。"); break; }
【実行結果】
colorがYELLOWのときの処理を行います。
課題
提出ファイル
「JavaStudy」ディレクトリの中に「1-4」というディレクトリを作成し、そこに課題を作成してください。
ファイル階層は
Windowsなら C:\LetsEngineer\curriculum\JavaStudy\1-4\
Macなら /Users/※ユーザー名※/LetsEngineer/curriculum/JavaStudy/1-4/
になります。
- ・Task1_4.java (下記コードをコピーしてください)
- ・Task1_4.class (コンパイル時に生成されます)
-
/** * Task1-4: 課題内容 * * 本課題では、すべての定数(合計6種類)を使いつつ、if文の使い方に慣れていきましょう! * 問① 〜 問⑤まで回答お願いします! * */ public class Task1_4 { // 定数(条件) // ① 名前とパスワードの定数を定義してください。 // 補足: // 定数は②〜⑤で使い回すために定義しておきます。 // final修飾子を付与すると、変数(動的に変わる値)ではなく、定数(変更不可な定まった値)となります。 // 「ここへ記述」部分へ適当な値を記述しましょう。 // ※詳しくはJava2章にて紹介します。 // 定数(メッセージ) private static final String CONST_MSG_SUCCESS = "ログイン成功です。"; private static final String CONST_MSG_ERROR_NAME = "名前に誤りがあります。"; private static final String CONST_MSG_ERROR_PASS = "パスワードに誤りがあります。"; private static final String CONST_MSG_ERROR_INPUT = "入力情報に誤りがあります。"; public static void main(String[] args) { // 以下の変数「name(名前)」「pass(パスワード)」を使用して、②〜⑤の条件を満たす処理を記述してください。 // 名前とパスワードは画面からの入力値だと想定してみましょう。 String name = "alice"; String pass = "pass"; // ② 名前が「 alice 」、パスワードが「 pass 」であった場合、「 ログイン成功です 」と出力してください。 // ③ 名前のみ正しい場合、「 パスワードに誤りがあります。 」と出力してください。 // ④ パスワードのみ正しい場合、「 名前に誤りがあります。 」と出力してください。 // ⑤ 名前もパスワードも間違っていた場合は、「 入力情報に誤りがあります。 」と出力してください。 } }
以下の添付画像のようにコンソールへ出力されるよう課題を実施し提出してください。
※windowsの方で 漢字が表示されない 場合は、ローマ字で記述してください。
コンパイルと実行の仕方については下記を確認しましょう。
Hello Worldを出してみる(Windowsの方)
Hello Worldを出してみる(Macの方)
提出方法については、カリキュラムの課題提出方法の通りにお願いします。