検索

キーワード


【Java】if文?switch文? 条件分岐の追加方法など使い方を解説!

  • 公開日:2020-09-17 03:25:04
  • 最終更新日:2021-01-25 17:50:43
【Java】if文?switch文? 条件分岐の追加方法など使い方を解説!

こんにちは。

駆け出しプログラマーの松倉です!

ここでは、条件分岐の使い方ついて紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです! 

関連記事リンク: 【Java】比較演算子、論理演算子、ビット演算子、シフト演算子の使い方について解説!【Java】while文や for文などの反復処理(繰り返し構文)と breakや continueなどの反復制御の使い方!【Java】変数とは?定数とは?詳しく解説! 変数の列挙型、代入、型変換、型推論の使い方についても紹介します!


順次実行

Javaのプログラムは上から順番に実行されます。

このようにプログラムを上から実行することを順次実行と呼びます。

順次実行は基本的な実行手順のため、特別な構文は用意されていません。

int a = 1;
int b = 2;
int c = a + b;
System.out.println(c);

このようなプログラムの場合、必ず上から順番に実行されます。

そのため変数 cは 3が代入された状態になっています。

この考え方がプログラムの基礎となります。




条件分岐

条件分岐では条件に応じて異なる処理を行わせることができます。

条件分岐には以下のような 2つの構文が用意されています。

  • if文:はい/いいえで答えられる単純な分岐
  • switch文:値が「Aのとき」、「Bのとき」、「Cのとき」…のように値ごとの分岐


if文と switch文はどちらも条件によって実行する処理を選ぶことができます。

そのためどちらを使えばよいのか迷うことがあります。

これは文法上の明確な決まりはないので状況によって使いやすいものを選択しましょう。


この記事では条件分岐について以下のことを紹介・解説を行います。

  • if文
  • if~else文
  • if~else-if~else文
  • switch文
  • 三項演算子


if文

論理式を評価した結果に応じて処理を実行する場合に使われるのが「if文」です

if文の使い方にはいくつかのバリエーションがあります。


if文の使い方

if(論理式){
	処理;
}

論理式で条件を記述します。

if文では条件を評価し trueだった場合はブロック内に記述された処理を実行します。

論理式が falseだった場合にはブロック内の処理は何も行わず if文の次の処理へ処理が移ります。


ブロック内の処理が 1行の場合は、{}(大括弧)を省略して記述することができます。

省略した if文の使い方

if(論理式)
	処理;


サンプルコードを確認しましょう。

public class Sample1_1 {
	public static void main(String args[]) {
		int i = 15;
		if (i < 100) {
			System.out.println("条件が一致");
			System.out.println("処理を実行します。");
		}
	}
}


実行結果:

条件が一致
処理を実行します。

論理式で変数「iは 100より小さい」としています。

変数 iの値は 15であるため「15 < 100」という論理式が評価されます。

結果は trueとなるため ifの中の処理が実行されました。


変数 iの値が 100以上の場合はどのような処理が行われるでしょうか?

Sample1_1の変数 iの値を 150にした場合のサンプルコードを確認しましょう。

public class Sample1_2 {
	public static void main(String args[]) {
		int i = 150;
		if (i < 100) {
			System.out.println("条件が一致");
			System.out.println("処理を実行します。");
		}
	}
}


実行結果:


実行結果は出力されませんでした。

変数 iの値は 150であるため「150 < 100」という倫理式が評価されます。

結果は falseとなるため if文の中の処理は実行されません。


プログラムを書くと if文の条件の中に、さらに条件を追加したい場合があります。

このような場合 if文の中にさらに if文を書き加えることで条件を追加することができます。

これを「ネスト(入れ子)」と呼びます。

ネストは書き方によっては可読性、メンテナンス性が悪くなり、 デバックもしにくくなる可能性があるので注意が必要になります。


Sample1_1にネストを追加した場合のサンプルコードを確認しましょう。

public class Sample1_3 {
	public static void main(String args[]) {
		int i = 15;
		if (i < 100) {
			if (i % 2 == 0) {
				System.out.println("条件が一致");
				System.out.println("処理を実行します。");
			}
		}
	}
}


実行結果:


実行結果は出力されませんでした。

1つ目の論理式で変数「iは 100より小さい」としています。

変数 iの値は 15であるため「15 < 100」という論理式が評価されます。

結果は trueとなるため 2つ目の論理式に移ります。

2つ目の論理式で「変数 iは 2で割ると余りが 0」としています。

そのため「(15 % 2) == 0」という論理式が評価されます。

結果は falseとなるため if文の中の処理は実行されません。



if~else文

論理式を評価した結果、条件を満たすときと満たさないときで、それぞれ別々の処理を実行させる場合に使われるのが 「if~else文」です。

論理式を評価して trueだった場合に論理式の後のブロック内の処理を、falseだった場合には elseの後のブロック内の処理を実行します。


if~else文の使い方

if(論理式){
	処理1;
}else{
	処理2;
}

論理式の評価は必ず trueか falseになるためどちらか一方のブロック内の処理だけしか実行されません。


if~else文を使ったサンプルコードを確認しましょう。

public class Sample2 {
	public static void main(String args[]) {
		int i = 100;
		if (i < 100) {
			System.out.println("iは100より小さい");
		} else {
			System.out.println("iは100以上");
		}
	}
}


実行結果:

iは100以上

if~else文では条件に一致しなかったときの処理を記述することができます。



if~else-if~else文

if~else文では条件が trueのときと falseのときの処理を記述することができました。

しかしこれだけでは 2つの分岐しか記述することができません。

プログラムを書く時には 3つ、4つと分岐するルートが必要になることがあります。

そのような多分岐を記述する場合は、if文の処理ブロックの後に新たに論理式を追加する事ができます

このように、条件が多分岐する場合に使われるのが「if~else-if~else文」です。


if~else-if~else文の使い方

if(論理式){
	処理1;
}else if(論理式){
	処理2;
	・
	・
	・
}else{
	処理;
}

if~else-if~else文は 「else if」を追加することでいくつでも条件を追加することができます。


いずれかの論理式で trueとなった場合、その直後のブロック内の処理だけを実行して終了します。

論理式で trueとなるような場合であっても一度論理式が trueと評価されると、それ以降の論理式は評価されないことに注意して下さい。


if~else-if~else文使ったサンプルコードを確認しましょう。

public class Sample3 {
	public static void main(String args[]) {
		int i = 200;
		if (i < 100) {
			System.out.println("iは100より小さい");
		} else if (i < 200) {
			System.out.println("iは200より小さい");
		} else
			System.out.println("iは200以上");
	}
}


実行結果:

iは200以上

複数の条件を書くことができることを確認しました。



switch文

分岐処理を記述するもう一つの構文として switch文があります。

if文も条件分岐に使われますが、else や else if による分岐が多くなると読みにくくなるため、代わりに switch文を使った方が可読性を上げる事ができる場合があります。

switch文は式によって処理を分岐させます。


switch文の使い方

switch() {
case1:
	処理1;
	break;

case2:
	処理2;
	break;

default:
	処理3;
	break;
}

switch文では式を評価した後に一致するラベルへ移動した後は、switch文の最後に達するか breakを実行するまでは順に処理が実行されていきます。

どの条件にも当てはまらない場合の処理を書きたい場合は、defaultを使用します。

switch文の式がどの caseの値とも一致しなかった場合には、defaultに書かれた処理が実行されます。


switch文を使ったサンプルコードを確認しましょう。

public class Sample4_1 {
	public static void main(String args[]) {
		int i = 1;
		switch (i) {
		case 1:
			System.out.println("iの値は1です");
			break;

		case 2:
			System.out.println("iの値は2です");
			break;

		default:		
			System.out.println("iの値は1、2以外の値です");
			break;
		}
	}
}


実行結果:

iの値は1です

変数 iの値は 1のため、case1で処理が終了しています。


Sample4_1の switch文で breakのない場合どのような処理が行われるかサンプルコードを確認しましょう。

public class Sample4_2 {
	public static void main(String args[]) {
		int i = 1;
		switch (i) {
		case 1:
			System.out.println("iの値は1です");

		case 2:
			System.out.println("iの値は2です");

		default:
			System.out.println("iの値は1、2以外の値です");
		}
	}
}


実行結果:

iの値は1です
iの値は2です
iの値は12以外の値です

変数 iは 1のはずですが case1以外の処理まで呼ばれています。

breakは switch文の実行を終了させる役割があります。

そのため breakがない場合、次の処理である case2や defaultが実行されます。

breakを省略した場合でもコンパイルエラーが発生するわけではないので注意が必要です。


switch文で使える基本データ型は「int、short、char、byte、enum、String」の 6つだけです。

String型には Java7から対応するようになりました。

そのため Java6以前の環境では String型の代わりに enumを使用します。


enumを使ったswitch文のサンプルコードを確認しましょう。

public class Sample5 {
	public static void main(String[] args) {
		Color color = Color.Yellow;

		switch (color) {
		case Red:
			System.out.println("赤色");
			break;
		case Blue:
			System.out.println("青色");
			break;
		case Yellow:
			System.out.println("黄色");
			break;
		default:
			System.out.println("その他の色");
		}
	}

	protected enum Color {
		Red, Blue, Yellow
	};
}


実行結果:

黄色

enumを使うことで Java6以前の環境で String型の文字列が使えるようになりました。



三項演算子

三項演算子とは if文のように条件分岐で処理を分けることができる演算子です。

三項演算子は、if文の省略や代替として使用します。


三項演算子の使い方

A?B :C

値Aは真偽値を取ります。

この値Aが trueのときは値Bとして、falseの場合は値Cとして式全体が評価されます。

三項演算子を使うと、if~else文を 1行に省略することができます。

if文を三項演算子にして扱ったり、様々なところで三項演算子を使う場合、使い方によっては可読性が落ちるため使用が避けられることもあります。


三項演算子を使ったサンプルコードを確認しましょう。

public class Sample6 {
	public static void main(String args[]) {
		String str = "dog";
		String result = (str.equals("dog")) ? "Animal" : "Fish";

		System.out.println(result);
	}
}


実行結果:

Animal

この値が trueのときは値Bとして、falseの場合は値Cとして式全体が評価されます。

このプログラムでは、論理式が trueのため左側の「Animal」を返しています。


まとめ

この記事では条件分岐について解説しました。

プログラムを書く上で if文は使用頻度が高く、とても重要な処理です。

この記事で使い方をしっかりと理解しておきましょう。

条件分岐が多いときには、if文よりも switch文の方がわかりやすく処理の早いプログラムが書けます。

三項演算子は  if文よりも短い行で簡潔にコードを記述できますが場合によっては可読性が下がることがあるので使い方には気を付けましょう。

条件分岐は日常的に使うものなので、覚えるのは難しいものではないと思います。

使い方がわからなくなったり、忘れたときはこの記事を思い出してくださいね。


関連記事リンク: 【Java】比較演算子、論理演算子、ビット演算子、シフト演算子の使い方について解説!【Java】while文や for文などの反復処理(繰り返し構文)と breakや continueなどの反復制御の使い方!【Java】変数とは?定数とは?詳しく解説! 変数の列挙型、代入、型変換、型推論の使い方についても紹介します!

【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様