【Java入門】if文・else if文・switch文-条件分岐の制御文を使いこなそう!

プログラミング

皆さんこんにちは、TaroTechです。
今回はJavaにおける条件分岐の制御文である「if文・else if文・switch文」について解説していきます。

Javaのプログラミングをしていく際に条件分岐は大変よく使用します。

この記事ではその条件分岐を表現する際に使用するif文・else if文とswitch文についてサンプルコードとフローチャートを用いてわかりやすく解説していきます。

1.if文の構文とサンプルコード

if文は条件判定によって処理を2つに分岐するときに使用します。

構文

if(条件式){
 条件式が真(true)の場合の処理

}else{
 条件式が偽(false)の場合の処理
}

if文のフローチャート

キーワードのifの後の()の中に条件式を記述します。なお条件式の値はboolean型(true or false)なので条件式には関係演算子を用いて式を記述します。

()直後の{}ブロックの中には条件式が真(true)の場合の処理を記述します。
一方、()内の条件式が偽だった場合はキーワードelseを記述し{}ブロックで囲み、{}内に偽だった場合の処理を記述します。

なお、偽の場合の処理は省略が可能であり、省略した場合、条件式の結果が偽なら処理は何も行われません。

サンプルコード1

public class Example1 {
	public static void main(String[] args) {
		int a = 2;

		if (a <= 0) {
			System.out.println("aは正の数ではありません。");
		} else {
			System.out.println("aは正の数です。");
		}
	}
}
実行結果

ifの直後の()の中で「aが0以下か」という条件式を記述しています。
条件式が真の場合は、「aは正の数ではありません。」と表示させる処理が行われ、
逆に条件が偽だった場合は、「aは正の数です。」と表示させる処理が行われます。

サンプルコード2

public class Example2 {
	public static void main(String[] args) {
		int a = 2;

		if (a <= 0) {
			System.out.println("aは正の数ではありません。");
		}
	}
}
実行結果(何も表示されない)

サンプルコード2も1同様に条件式と真の場合の処理は同じです。
しかし、このコードでは偽の場合の処理が省略されています。
つまり、条件式の中身が偽だった場合は何も処理が行われないため、コードを実行しても何も表示されないことになります。

サンプルコード3

public class Example3 {

	public static void main(String[] args) {
		int a = 2;

		if (a < 0) {
			System.out.println("aは負の数です。");
		}

		if (a == 0) {
			System.out.println("aは0です。");
		} else {
			System.out.println("aは自然数です。");
		}
	}
}
実行結果

サンプル3ではまず一つ目のif文で条件判定を行った際に、真なら「aは負の数です。」と表示する処理が行われ、偽なら処理が省略されています。
さらに、処理は後続へ続き2つ目のif文で再度条件判定が行われています。
2つ目のif文が真なら「aは0です。」と表示する処理が行われ、偽なら「aは自然数です。」と表示する処理が行われます。
このサンプルコードを分かりやすく理解するためにフローチャートに直すと以下のようになります。

サンプルコード3のフローチャート

コードの流れが分かりづらいときはこのようにフローチャートに直してみると分かりやすくなります。

2.else if文の構文とサンプルコード

1で説明したif文をより発展的にしたものがelse if文です。
else if文では複数の条件を重ねてより細かく条件を細分化することができます。

構文

if(条件式1){
 条件式1が真の場合の処理
}else if(条件式2){
 条件式1が偽でかつ条件式2が真の場合の処理
}else{
 条件式1および2の両方とも偽の場合の処理
}

else if文のフローチャート

サンプルコード1

public class Example4 {

	public static void main(String[] args) {
		int a = 123;

		if (a < 0) {
			System.out.println("aは負の数です。");
		} else if (a < 10) {
			System.out.println("aは1桁の数です。");
		} else {
			System.out.println("aは2桁以上の数です。");
		}
	}
}
実行結果

1つ目のifの条件1が「a < 0」であり、条件1が真の場合は「aは負の数です。」と表示させる処理が行われます。
条件1が偽の場合(a >= 0)は次のelse ifの条件2である「a < 10」という判定が行われます。
2つ目の条件が真の場合(0 <= a < 10)は「aは1桁の数です。」と表示させる処理が行われ、逆に条件2が偽だった場合(a > 10)は「aは2桁以上の数です。」と表示させる処理が行われます。

今回のサンプルコードだとaは123なので「aは2桁以上の数です。」と表示されます。

サンプルコード2

public class Example5 {

	public static void main(String[] args) {
		double d = 23.0 / 7.0;

		if (0 < d && d <= 1.0) {
			System.out.println("23.0/7.0は0より大きく1以下です");
		} else if (d <= 2.0) {
			System.out.println("23.0/7.0は1より大きく2以下です");
		} else if (d <= 3.0) {
			System.out.println("23.0/7.0は2より大きく3以下です");
		} else if (d <= 4.0) {
			System.out.println("23.0/7.0は3より大きく4以下です");
		} else {
			System.out.println("23.0/7.0は4より大きい");
		}
	}
}
実行結果

サンプルコード2のようにelse ifは複数重ねることができますが、条件は重ならないように注意する必要があります。
また、else if文はif文よりも複雑になりやすいので慣れるまではフローチャートを書いてコードを考えるとよいでしょう。

else if文の複数重ね合わせ

3.switch文の構文とサンプルコード

switch文は式の値によって処理を複数に分岐できる構文です。
case文と一緒に使用され、コードの上から順番に値を比較し、該当したcase文に記述された処理を行います。

構文

switch(変数や算術式、メソッドの呼び出し){
  case 値1:
    処理1
;
    break ;
  case 値2:
    処理2 ;
    break ;
  case 値3:
    処理3 ;
    break ;
   ・
   ・

  default:
    処理n ;
    break ;
}

キーワードswitch直後の()内には変数や算術式、メソッドの呼び出しを記述します。
()に指定できる式や変数は、4バイトまでの整数値・byte型・short型・int型・char型・String型です。

switch文の{}ブロック内に記述されたcase文で指定された値を上から順番に比較し、該当したcase文の直後に記述された処理を実行します。

処理を実行した後はbreak文によって同じswitchの{}ブロックから抜けます。
もし、break文を記述しなかった場合は後述のcase文とも同様に比較を行い、該当箇所があれば処理を行うという動作を繰り返していきます。

case文の直後にはswitchの()内の値と比較する値を指定します。
値は、4バイトまでの整数値の定数かString型の定数のみです。

default文は上から順番にcase文と比較していっていずれの値とも一致しなかった場合に対応させることができる文です。なお、dafault文は省略することができるため、defaultを省略してcase文のいずれとも一致しなかった場合は何も処理が行われません。

switch文のイメージフローチャート

サンプルコード1

public class Example6 {
	public static void main(String[] args) {
		int testScore = 8;

		switch (testScore) {
		case 7:
			System.out.println("成績は可です。");
			break;
		case 8:
			System.out.println("成績は良です。");
			break;
		case 9:
			System.out.println("成績は優です。");
			break;
		case 10:
			System.out.println("成績は秀です。");
			break;
		default:
			System.out.println("成績は落第です。");
			break;
		}
	}
}
実行結果

最初にtestScoreというint型の変数を宣言したのち、switchの()内で式として設定します。
switchの{}ブロック内で上から順にcase文の値と比較を行い、該当する値があった場合はその直後の処理を行い、breakで{}ブロックから抜けます。

今回はtestScore が8なので、case 8:の「成績は良です。」と表示させる処理が行われ、break文でブロックから抜けます。

サンプルコード2

public class Example7 {

	public static void main(String[] args) {
		int month = 4;

		switch (month) {
		case 12:
		case 1:
		case 2:
			System.out.println("季節は冬です。");
			break;
		case 3:
		case 4:
		case 5:
			System.out.println("季節は春です。");
			break;
		case 6:
		case 7:
		case 8:
			System.out.println("季節は夏です。");
			break;
		case 9:
		case 10:
		case 11:
			System.out.println("季節は秋です。");
			break;
		default:
			System.out.println("該当する月は存在しません。");
			break;
		}
	}
}
実行結果

先ほどのサンプルコード1と同様の流れになりますが、1つのcase文に対して1処理ではなく、複数のcase文に対してまとめて1つの処理を行わせる記述方法もあります。
上の例でいうと、例えばmonthに12か1か2が代入された場合はいずれも「季節は冬です。」と表示させる処理が行われるということです。

まとめ

皆さんいかがだったでしょうか。
今回はJavaにおける条件分岐を表す構文ということで「if文・else if文・switch文」を紹介してきました。

いずれもよく使う構文になりますので、慣れるまではフローチャートにコードを落とし込みながらゆっくり使いこなしていきましょう!

コメント

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