図でわかるJava:if-else if-else構文からswich文に変える方法

Java

Javaのif-else if-else構文からswich文に書き換える方法についての記事です。

初心者の人向けに、図やコードの例も載せてますので、参考にしてみてください。

書き換え方をいつも忘れてしまうという方はお気に入り保存必須です‼(笑)

ビギン
ビギン

if-else if-else…….

ゆりグル
ゆりグル

そういう時は、swich文を使ってみよう!

分岐構文~if文の種類~

まずif文はは3つのプログラム構造のうちの「分岐」のジャンルに入ります。

3つのプログラム構造についてはこちらを参照☟

初心者必見!図でわかるプログラムの3つの制御構造
プログラム作成には欠かせない、プログラムの3つの制御構造「順次」「分岐」「繰り返し」についてJavaのコードで例を見ながら、初心者向けに解説していきます。プログラムの構造を知ることで、複雑なプログラムも一気に読みやすくなります。

そしてif文には3種類のバリエーションがあります。


今回はこの中のif-else if-else構文について詳しく見ていき、swich文への書き換えを学んでいきます。

if-else if-else構文

if-else if-else構文を見る前に、if-else構文の構造から見ていきましょう。
if-else構文では、「もし~だったら」の条件式がtrue(Yes)場合と、false(No)場合によってそれぞれ処理がわかれます。条件式がtrueの場合、ブロック1を実行し、falseの場合は、ブロック2を実行します。

if-else構文

上記のif-else構文はtrue(Yes)か、false(No)し、処理を分けていますが、if-else if-else構文では「更に別の条件で分岐させる」ことができます。フローチャートで見てみましょう。

if-else if-else構文

if-else if-else構文のルール
・else ifブロックは複数記述できるが、if ブロックより後ろ、elseブロックより前にだけ記述できる。
・最後のelseブロックは、中身が空ならばelseごと省略可能

if-else if-else構文:コード例

占いのプログラムをif-else if-else構文で書いてみた例です。
ランダムの数字で、占い結果が変わるようになっています。

if-else if-else構文コード例:

package sample;

public class Main7 {

	public static void main(String[] args) {
		System.out.println("今日の運勢は…");

		//1~4までの数字をランダムで出す
		int fortune=(int) ((Math.random() * 4) + 1);

		if (fortune==1) {
			System.out.println("大吉");
		} else if (fortune==2) {
			System.out.println("中吉");
		} else if (fortune==3) {
			System.out.println("小吉");
		} else {
			System.out.println("凶");
		}

	}

}

結果:

今日の運勢は…
大吉・中吉・小吉・凶のどれか

もちろんif-else if-else構文でもかけますが、コードがスッキリしません。
そこで、swich文に書き換えることでスッキリしたコードに生まれ変わるのです。

swich文への書き換え

上記のコードは以下のswich文に書き換えることができます。
処理内容はif-else if-else構文で書いた上記の占いのプログラムと同じです。

swich文のコード例:

package sample;

public class Main8 {

	public static void main(String[] args) {
		System.out.println("今日の運勢は…");

		//1~4までの数字をランダムで出す
		int fortune=(int) ((Math.random() * 4) + 1);

		switch(fortune) {
		case 1:
			System.out.println("大吉");
			break;
		case 2:
			System.out.println("中吉");
			break;
		case 3:
			System.out.println("小吉");
			break;
		default:
			System.out.println("凶");
		}

	}

}

結果:

今日の運勢は… 
大吉・中吉・小吉・凶のどれか

 

swich文に書き換えることができる条件
・すべての条件式が「変数==値」「変数==変数」のように左辺と右辺が一致するか比較する式になっている
・比較する値が整数(byte型、short型、int型)、文字列(String型)または文字(char型)である

swich文の構造

swich文の構造をフローチャートで見てみましょう。

swich構文

if-else if-else構文の構造と似ていますが、少しスッキリした印象がありますね。

swich文にはかかせないbreak文

break文はswich文に欠かせないのです。
というのもbreak文を書き忘れてしまうと、違った結果になってしまい、やりたかった処理ではなくなってしまうことがあるので注意が必要です。
先程の占いのプログラムにbreak文を忘れてしまうとどうなってしまうのでしょうか。

break文を入れ忘れたコード例:

package sample;

public class Main8 {

	public static void main(String[] args) {
		System.out.println("今日の運勢は…");

		//1~4までの数字をランダムで出す
		int fortune=(int) ((Math.random() * 4) + 1);

		switch(fortune) {
		case 1:
			System.out.println("大吉");
			//ココにbreak文の書き忘れ
		case 2:
			System.out.println("中吉");
			//ココにbreak文の書き忘れ
		case 3:
			System.out.println("小吉");
			//ココにbreak文の書き忘れ
		default:
			System.out.println("凶");
		}

	}

}

結果(case 1の場合):

今日の運勢は…
大吉
中吉
小吉
凶

結果(case 2の場合):

今日の運勢は…
中吉
小吉
凶

結果(case 3の場合):

今日の運勢は…
小吉
凶

結果(case 4の場合):

今日の運勢は…
凶

あれ?運勢がいくつも出てしまってますね…どういうことなのでしょうか。

例えば、case 1の場合は、ランダムの数字が1になったので、case 1の中身を実行します。しかし、break文がないので、次のcase 2に進んでしまいます。同じくここにもbreak文がないため、case 3に進み、またbreak文がないので、defaultの処理にも進んでしまいます。ですので、すべての運勢が出てしまっている状態です。

break文がないと処理を中断できないので、次の処理も行ってしまうのです。
break文は明示的に「処理を中断して、swich文を抜ける」という指示なのです。

最後に

swich文ですっきりしたコードをかけるようになれば今日の目標は達成です‼
swich文では特にbreak文を書き忘れてしまうのが初期のミスでよくあると思います。
私もbreak文を忘れてしまい思っていた結果と違っていたのですが、最初なかなか気づくことができませんでした。
皆さんも特にswich文を書くときは、そこに注意してくださいね。

コメント

タイトルとURLをコピーしました