前回の「 if 文と関係演算子」で、ある条件を満たせば命令文を実行するという流れについて説明しました。
今回はさらに条件を追加する処理について説明します。
前回の内容
if ~ else 文
▶「もしも〇〇ならば✖✖を実行し、そうでなければ△△を実行する」
前回の「if 文と関係演算子」で20未満であれば「未成年ですね」と出力しましたが、20以上の場合も何らかの命令文を実行させたい場合は if 文だけでは足りません。
そのような場合は if ~ else 文を利用します。
if (条件式)を満たせば✖✖の命令文を実行し、それ以外であれば△△の命令文を実行します。
else の後には条件式を記述する必要はありません。
- if ( 〇〇 ) {
- ✖✖ ;
- } else {
- △△ ;
- }
⇩
- if ( 条件式 ) {
- / / 条件式が true の場合
- 命令文1 ;
- } else {
- / / 条件式が false の場合
- 命令文2 ;
- }
if ~ else 文の使用例
- int age ;
- age = 12 ;
- if ( age < 12 ) {
- System . out . println ( ” 小学生ですね ” ) ;
- } else {
- System . out . println ( ” 中学生以上ですね ” ) ;
- }
まず age という変数を宣言して12という数字を代入します。
条件式の中には「12未満」という条件を提示して、それを満たした場合( true )は命令文「小学生ですね」の出力を実行します。
それを満たさなかった場合( false )は else の中に記述します。「中学生以上ですね」の出力を実行します。
- class Example
- public static void main ( String [ ] args ) {
- int age ;
- age = 12 ;
- if ( age < 12 ) {
- System . out . println ( ” 小学生ですね ” ) ;
- } else {
- System . out . println ( ” 中学生以上ですね ” ) ;
- }
- }
- }
複数の if ~ else 文
▶ if ~ else 文を連結して条件に応じた複数の分岐をおこなえる。
- int age
- age = 18 ;
- if ( age < 6 ) {
- System . out . println ( ” 乗車料金は無料です ” ) ;
- } else if ( age < 13 ) {
- System . out . println ( ” 子ども料金で乗車できます ” ) ;
- } else {
- System . out . println ( ” 大人料金が必要です ” ) ;
- }
これまでは1つの条件の提示だけでした。
実際のプログラムでは複数の条件分岐を入れ子構造で重ねて表現することがあります。
例えば何かのチケットや乗車券の場合はもっと細かく年齢を分けて料金設定されていることがあります。
上記の例の条件ではまず6(歳)であるかどうかの判断をします。
6(歳)未満であれば「乗車料金は無料です」と表示します。
そうでない場合( else )
6(歳)以上であって、さらに13(歳)未満であるかどうかの条件を足します。
その条件を満たした場合こんどは「子ども料金で乗車できます」と表示します。
そしてそれでも条件を満たしていない場合
つまり13(歳)以上である場合は「大人料金が必要です」と表示します。
これは2つの条件文が重なっています。
if ~ else 文はこれまで説明しました。
こんどはその間に else ~ if が挿入されています。
if ( age < 6 ) の条件で分岐した後にさらに else ~ if 文によって分岐させます。
フローチャート
条件分岐で true の場合はいったん幹の流れから外れて命令文を実行します。
そして、命令文を実行し終わった後は再び中央の幹の流れへと戻って次の命令文を実行します。
プログラム
- class IfElse
- int age; // 変数の宣言
- age = 12 ;
- if ( age < 6 ) {
- System . out . println ( ” 乗車料金は無料です “ ) ;
- } else if ( age < 13 ) {
- System . out . println ( ” 子ども料金で乗車できます “ ) ;
- } else {
- System . out . println ( ” 大人料金が必要です “ ) ;
- }
- }
- }
age = 12 ; で変数に12を代入したので実行結果は「子ども料金で乗車できます」となります。
練習問題1
日常生活の中で条件に応じて処理が変化するものを探して、それを if ~ else 文で表現してみましょう。
まずは日本語で作成して、フローチャートに落とし込んでみてください。
- if ( 今日の天気 == 晴れ ) {
- if ( 洗濯物がたまっている == true )
- 洗濯をする
- } else {
- 遊びにでかける
- }
- } else {
- 家にいる
- }
この例では if 文の中に if 文が入れ込まれています。
さらに複雑な処理も考えてみましょう。
練習問題2
a の値が3,5,8,9,10,15,20のときに何が出力されるか予測し確認してみましょう。
- if ( a < 5 ) {
- System . out . println ( ” 不合格です ” ) ;
- } else if ( a < 9 ) {
- System . out . println ( ” もう少し頑張りましょう ” ) ;
- } else if ( a < 15 ) {
- System . out . println ( ” あとちょっとです ” ) ;
- } else {
- System . out . println ( ” 合格です ” ) ;
- }
答え
3ー不合格です
5-もう少し頑張りましょう
8-もう少し頑張りましょう
9-あとちょっとです
10ーあとちょっとです
15ー合格です
20-合格です
となります。
まず3は最初の条件である5以下を満たしているので「不合格です」が出力されます。
次の5ですが5未満である
という条件を満たしていないので次の条件へ移ります。そして9未満という条件を満たすので「もう少し頑張りましょう」が出力されます。8も同様です。
15は15未満という最後の条件も満たしてはいないためその他の } else { へ移ります。
「合格です」が出力されます。
複数の if 文の後の{ }の省略
-
- if 文の後の命令文が1つなら{ }を省略できる
- if ( age >= 20 )
- System . out . println (” 二十歳以上ですね ” ) ;
- if ( age >= 20 ) {
- System . out . println ( ” 二十歳以上ですね ” ) ;
- }
- ただし{ }を省略するときは注意が必要(2つめの命令は無条件で実行される)
- if ( age >= 20 )
- System . out . println ( ” 二十歳以上ですね ” ) ;
- System . out . println ( ” お酒が飲めますね ” ) ;
- この省略をしても適応できるのはその直後の1つの命令だけです。2つめの命令になると、その条件を満たすかどうかは関係なく無条件で実行されます。1つめの命令文は20以上で「二十歳以上ですね」が実行されます。
2つめの命令文は無条件で実行されるので、
age >= 20 の変数 age に 16 を代入しても「お酒が飲めますね」は出力されます。(「二十歳以上ですね」は出力されない)
まとめ
プログラムによって実行されるコンピューターの命令にはこの条件分岐が複雑に組み込まれていることが多くあります。簡単な条件分岐を日ごろから意識して条件文に慣れていきましょう。