初心者が1から始めるJava開発-Vol.4- 条件分岐編

プログラムには大きく3要素あると思っていて

- 順次実行（順次）
- 条件分岐（分岐）
- 繰り返し（反復）

です。

このうち順次というのは読んで字のごとく、「順番に処理を実行する」という意味で、
Javaでは、上に書いたものから先に実行されるという一般的なルールに従います。

当然、Vol.3で紹介したメソッドやクラスは呼び出された順に実行するので、
クラス内に書かれている順ではなく、呼び出された順です。

今回は2つ目の条件分岐について紹介していきます。


---------------------------------
**Javaの初心者向けおすすめ本**
<a href="https://hb.afl.rakuten.co.jp/ichiba/0fe6b456.5ebf4c8d.0fe6b457.c2862225/?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2Fee5cedff9e577d428e946d99101a96af%2F&link_type=pict&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0Iiwic2l6ZSI6IjEyOHgxMjgiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjEsImFtcCI6ZmFsc2V9" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><img src="https://hbb.afl.rakuten.co.jp/hgb/1e8530d6.19a113c9.1e8530d7.fe2e9cd6/?me_id=1213310&item_id=19815844&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F7807%2F9784295007807.jpg%3F_ex%3D128x128&s=128x128&t=pict" border="0" style="margin:2px" alt="" title=""></a>
<a target="_blank" href="https://www.amazon.co.jp/gp/product/4295007803/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4295007803&linkCode=as2&tag=soepy-22&linkId=12b14c188a12d530f71bda0cf5a2d3c7">スッキリわかるJava入門 第3版 (スッキリシリーズ)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=soepy-22&l=am2&o=9&a=4295007803" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

------------------------------------------


#条件分岐

読んで字のごとく、何らかの条件に従い処理を分岐させることです。

分かりやすい例をあげましょう（いい例かは別ですw）

子供が生まれて、
1、もし男の子だったら「たかし」という名前を付ける
2、もし女の子だったら「さやか」という名前を付ける

というように**性別**という**「条件」**によって、おなじ「名前を付ける」でも、行動が変わります。

というように、あらかじめ条件が存在し、それによって処理される内容も変わるというのが条件分岐で、Javaでも当然そのようなことが実現できます。


ではまず、簡単な例として、あいさつのプログラムを書いていきましょう。


#プログラム実装

```
仕様

「朝」だったら「Good Morning World!」
「昼」だったら「Hallo World!」
「夜」だったら「Good Evening World!」

と出力するプログラム
```

では実際に、書いていきましょう。


まず、「Greeting.java」というクラスを作ります。パッケージはどこでも構いません。
やり方わすれた方は、[Vol.2](https://qiita.com/soepy/items/f8e78d6a29c164abb321)に戻って確認してください。


```java
package JavaTutorial;

public class Greeting{

}
```

こんな感じでクラスが作成されましたでしょうか？

packageの部分は作った階層によって異なるので、いまは特に考えなくてよいです（本当は重要です）。

次に出力するメソッドを実装します。Vol.2同様、まずは汎用的な挨拶であるHello World!を表示するように実装しましょう。

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}
```

こんな感じでした。

それではいよいよ、条件分岐の実装をしていきます。

Javaでは条件分岐に使う文法は2つ覚えてください。

- if文
- switch文

それぞれ説明していきます。

##if文

文字通り**if**の後ろに定義する条件に合致すれば実行し、合致しなければ実行しないというものです。
実際の実装をしつつ説明していきます。

まず、**System.out.println("Hello World!");**の前にifとタイプしてみましょう。
すると、

```
if-if statement
```
とサジェストされるのでそれを選びましょう。

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		if (condition) {
			
		}
		System.out.println("Hello World!");
	}
}
```
こんな感じになりましたでしょうか？

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		if (condition) {
		//conditionの部分の条件に合致したらこの部分の処理を実行する	
		}
		System.out.println("Hello World!");
	}
}

```

それでは、「朝」だったら「Good Morning World!」と表示する仕様を書いていきましょう

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		String timeZone = "朝";

		if (timeZone.equals("朝")) {
			System.out.println("Good Morning World!");
		}
		System.out.println("Hello World!");
	}
}
```

timeZoneというString型のローカル変数を定義してこいつの状態によって挨拶を返すようにしてみましょう。

これでRunAsからJavaApplicationで実行してみましょう。。。

2つ出てきましたね。。

そうです。Hello Worldは無条件に実行されます。

なので、実行されないようにしましょう。
以下のように**else**を使えばOKです。

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		String timeZone = "朝";

		if (timeZone.equals("朝")) {
			System.out.println("Good Morning World!");
		} else {
			System.out.println("Hello World!");
		}
	}
}
```

このようにelseの中に入れてしまえば、

**if　朝なら　GoodMorning**
**ではなければ　Hello**

という意味になります。
これでRunAsからJavaApplicationで実行してみましょう。
確かに**Good Morning World!**だけが出力されたと思います。

次に
timeZoneを「昼」に書き換えて実行してみましょう。

今度は逆にHello Worldだけが出力されたと思います。

では最後に
「昼」だったら「Hallo World!」
「夜」だったら「Good Evening World!」
の仕様を完成させましょう。

3個の条件判定をする場合には**else if**を使って2番目以降の条件を書いていくことが可能です。

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		String timeZone = "朝";

		if (timeZone.equals("朝")) {
			System.out.println("Good Morning World!");

		} else if (timeZone.equals("昼")) {
			System.out.println("Hello World!");

		} else if (timeZone.equals("夜")) {
			System.out.println("Good Evening World!");

		}
	}
}

```

こんな感じで書くことができます。

ちなみにこう書くと「朝」でも「昼」でも「夜」でもない場合は挨拶をしません。
※皆さんはしましょう。

if文が分かったところで、今度はこれをswitch文で書き換えていこうと思います。

## switch文

switch文は、if文よりも数が多い条件判定のときに役立ちます。
また決まった番号やIDが振られているときなどに重宝します。

どっちで書いても処理の内容はほとんど変わらないので、覚えましょう。

[Vol.3](https://qiita.com/soepy/items/135cd35ba678f2b2a246)で学んだメソッドに切り出して書いてみましょう。

名前は何でも良いですが**greetingSwitch**とでもしましょうか。


```java
private static void greetingSwitch() {
		
}
```

private メソッドにして、staticも付けておきましょう。
そして、mainメソッドから呼びます。timeZoneは同じものを使えるように引数に指定します。
こんな感じです。

```java
package JavaTutorial;

public class Greeting {
	public static void main(String[] args) {
		String timeZone = "朝";

		if (timeZone.equals("朝")) {
			System.out.println("Good Morning World!");

		} else if (timeZone.equals("昼")) {
			System.out.println("Hello World!");

		} else if (timeZone.equals("夜")) {
			System.out.println("Good Evening World!");

		}
		greetingSwitch(timeZone);
	}
	
	private static  void greetingSwitch(String timeZone) {
		
	}
}

```
そしたら実際にswitch文を書いていきます。greetingSwitchメソッドの中で「switch」とタイプしてください。

```
switch-switch case statement
```
とサジェストされたものがあると思うのでそれを選びます。
すると、

```java
	private static  void greetingSwitch(String timeZone) {
		switch (key) {
		case value:
			
			break;

		default:
			break;
		}
	}

```

こんな感じになったと思います。
switch文では
「**key**が**value**だったら直下の処理を実行する」
という意味の記述になります。

なのでifの内容をswitchにすると以下のように書けます。

```java
	private static void greetingSwitch(String timeZone) {
		switch (timeZone) {
		case "朝":
			System.out.println("Good Morning World!");
			break;
		case "昼":
			System.out.println("Hello World!");
			break;
		case "夜":
			System.out.println("Good Evening World!");
			break;

		default:
			break;
		}
	}

```

こんな感じになります。

- default 部分は何も処理がない場合は無くてもOKです。
- breakを書かなかった場合に、場合によっては他の処理も実行されてしまう可能性があるので、breakを書きます。

後は実際に事項してみてください。

Helloのあいさつのやり取りのように2本同じものが出てきたと思います。

このように、入力によって処理を分岐させるのが「条件分岐」であり、javaでは多くの場合湖のように書きます。

#最後に

条件分岐はJavaに限らずどんなプログラミング言語でも重要な考え方になりますので、マスターして使いこなしましょう。

#参考

[【Java】 switchって何？](https://nobuo-create.net/switch/)