Javaでプログラムを練習する中で、「条件分岐」は欠かすことができません。そもそも、条件分岐とはどういったものでしょうか?そして、Javaではどうやって使えばよいのでしょうか?
この記事では、ifとswitchによる条件分岐について、詳細に解説します。
条件分岐とは?
条件分岐とは、その字面通り「特定の条件に合わせて、処理を分岐すること」です。例えば、学校の成績の集計を思い出してください。あなたは今、期末テストの採点をし終わりました。
テストの結果を集計し、平均点未満を赤点とする場合を考えましょう。
このとき、「学生が平均点未満か否か」判断が必要です。これを「条件」といい、条件に合わせて処理を変えることを「条件分岐」といいます。
条件分岐はifとswitchと三項演算子
それでは、具体的にJavaの条件分岐を使ってみましょう。
Javaの条件分岐には3つの方法があります。
条件分岐には3つの方法
- if
- switch
- 三項演算子(今回は説明を省きます)
特に、よく使われるのがifとswitchです。これらは、「ifステートメント」や「switchステートメント」、「switch/caseステートメント」などと言われることもあります。
最後の三項演算子は、使用頻度は高くありませんので、今回は説明を省きます。中級者や上級者にステップアップするときに覚えると良いでしょう。
ifステートメントによる条件分岐-基本の形
まず、Javaの条件分岐で最も基本となるのは「ifステートメント」です。
指定した条件に当てはまる際に、特定の処理を行えます。
if(条件){
処理内容1;
処理内容2;
:
}
ココがポイント
- ifの直後に書く条件は、必ず半角丸カッコ()で囲む
- 処理内容は何行でも書けるが、1行に1つの処理を書き、行末に半角セミコロン(;)を置く
- 処理内容を書く場合は、必ず「インデント」する
特に、Javaのプログラムでは「インデント」(字下げ)がとても大切です。
インデントとは、処理のまとまりを見やすく&わかりやすくするために、波括弧で囲まれた範囲の行頭に、半角スペースやタブ文字を入れて字下げをすることです。
インデントがおかしいと、プログラムがとても読みにくくなります。また、場合によっては他者から非難されることもある、大切なポイントです。
脱初心者のためにも、必ず「ifの波括弧で囲まれた範囲はインデントする」ことを習慣づけましょう。
[Main.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String[] args){ // 3人分の特典を定義 var a = 30; var b = 50; var c = 70; // 平均点を計算 var average = (a + b + c) / 3.0f; // 平均点を印字 System.out.println("平均点" + average); // aさんが平均点以下なら「赤点」と出す。 if (a < average) { System.out.println("赤点"); } } } |
注意ポイント
変数「var」について
Java 10では、ローカル変数時のvarを用いた型推論が使用可能になりました。簡単に言えば、変数利用時に型を意識せずに「var」を使って型宣言ができる機能です。
java 10以前の方は「int」「float」等の型を明確に指定する必要があります。
java10以前の型宣言のコードは下記の様になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String[] args){ // 3人分の特典を定義 int a = 30; int b = 50; int c = 70; // 平均点を計算 float average = (a + b + c) / 3.0f; // 平均点を印字 System.out.println("平均点" + average); // aさんが平均点以下なら「赤点」と出す。 if (a < average) { System.out.println("赤点"); } } } |
コンソール
平均点50.0
赤点
サイコロゲームとelse
Javaの習得は「習うより慣れろ」が一番の早道です。
ここからは、実際にコードを手で入力しながら覚えていきましょう。
Javaでサイコロゲームを作った。サイコロの出目が1なら大当たり!
サイコロの出目が1と異なる場合はハズレ。
プログラムによっては、1つの条件に当てはまる場合と、それ以外の場合で処理を分けたいことがあるでしょう。
条件に当てはまる場合アクション1を実行し、当てはまらない場合elseで指定されたアクション2を実行します。
if (条件) {
アクション1;
:
} else {
アクション2;
:
}
[ Main.java ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package org.pmisfbac.java.sample.ifandswitch; import java.util.Random; public class Main { public static void main(String[] args) { // 乱数ジェネレーターを生成 Random rand = new Random(); // サイコロを振る int dice = rand.nextInt(6) + 1; // サイコロの出目を出力する System.out.println("出目" + dice); // 出目が1なら大当たりと出力する if(dice == 1) { System.out.println("大当たり!"); // それ以外ははずれ } else { System.out.println("ハズレ…。"); } } } |
BMIの判定とelse if
体重と身長を指定すると、BMIを計算してくれる。60kg172cmは普通。
80kg172cmは肥満。
50kg172cmは痩せ型。
場合によっては、条件が2つよりも多いことがあります。その際は「else ifステートメント」を用いることで、条件分岐を複数記述できます。なお、「else」と「if」の間には、半角スペースを必ず入れます。
if (条件) {
アクション1;
:
} else if (条件2) { 👈 必要な数だけ「条件3」「条件4」と条件文を足していく
アクション2;
:
} else {
アクション3;
:
}
[ Main.java ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package org.pmisfbac.java.sample.ifandswitch; public class Main { public static void main(String[] args) { // 体重(kg)を指定 float weight = 60.0f; // 慎重(m)を指定 float height = 1.72f; // BMIを計算 float bmi = weight/ (height * height); System.out.println("体重" + weight + "kg"); System.out.println("身長" + height * 100 + "cm"); System.out.println("BMI = " + bmi); if(bmi < 18.5) { System.out.println("痩せ型"); } else if ( bmi < 26) { System.out.println("普通"); } else { System.out.println("肥満"); } } } |
switch caseステートメントによる条件分岐
サイコロの出目に合わせて占い結果を出す例。
次に、「switchステートメント」による条件分岐を解説します。switchは、以下に示す条件に合致する場合に使用します。
Case文の条件
- 条件分岐には3つの方法
- 1つの要素が別の要素に対応できる場合
例えば、サイコロを振って、その出目を元に占いをする例を考えましょう。
- 出目が1:大吉
- 出目が2:中吉
- 出目が3:吉
- 出目が4:末吉
- 出目が5:凶
- 出目が6:大凶
これは見たら分かる通り、サイコロの出目一つ一つの要素が、別の占いの一つ一つの結果に対応できます。このような条件分岐で使用するのが、switchです。
switch(変数) {
case 状態1:
状態1の処理;
break;
case 状態2:
状態2の処理;
break:
case ~
~;
break:
default:
条件に当てはまらない時の処理;
break;
}
ココがポイント
基本的にswitchが使用できる箇所では「if~else if~else」を用いるよりも適切な場合が多いと覚えておきましょう。
- switchの方が記述がシンプルになりやすい
- switchの方が可読性(読みやすさ)が高くなりやすい
- switchなら前後の条件に影響されないため、分かりやすい
「if~else if~else」と「switch/case」とを書き比べ場合、switchの方が読みやすいです。
[ Main.java ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
package org.pmisfbac.java.sample.ifandswitch; import java.util.Random; public class Main { public static void main(String[] args) { // 乱数ジェネレーターを生成 Random rand = new Random(); // サイコロを振る int dice = rand.nextInt(6) + 1; // サイコロの出目を出力する System.out.println("出目" + dice); // サイコロの出目に応じて占い結果を出す switch(dice) { case 1: System.out.println("大吉"); break ; case 2: System.out.println("中吉"); break ; case 3: System.out.println("吉"); break ; case 4: System.out.println("末吉"); break ; case 5: System.out.println("凶"); break ; default: System.out.println("大凶"); break ; } } } |
まとめ
条件分岐はプログラムを書く上で基本的な事項です。今回の内容を復習し、分からない点が無いか再確認しましょう。
条件分岐のポイント
- Javaには3つの条件分岐の方法があるが、主にifステートメントとswitchステートメントを使う
- Javaの条件は条件式で記述し、条件式の結果は必ず真偽値になる
- 「if」は一つの条件で分岐ができる
- 「if~else」の形式で、で一つの条件とそれ以外の条件で分岐ができる
- 「if~else if~else」の形式で、複数の条件で分岐ができる
- ただし、「一つ一つの要素が別の一つ一つの要素へ対応できる」場合は、「switch~case~default」を使用する方が適することが多い
Javaプログラムの基礎知識(全11記事)
├─Javaとは? Javaの基本概要をわかりやすく解説!
├─IDEとは?エクリプス環境を整えよう!
├─Javaの基本構造とコンパイルの流れを解説!
├─変数、リテラル、基本データ型について?
├─文字列の作成方法とStringのメソッドについて!
├─演算子について!
├─ifとswitchによる条件分岐を理解しよう!
├─ループ処理をおこなうfor文を理解しよう!
├─データをまとめて管理する配列とは?
├─メソッドとメソッドの定義について!
└─Javaに標準装備されている「ライブラリー」を活用しよう!