Javaで学習してきたこと（その４）条件分岐と繰り返し

#Javaの振り返り
前回はJavaにおける命令実行の文について書かせていただきました。
よろしければそちらもご覧ください。
[Javaで学習してきたこと（その３）命令実行の文](https://qiita.com/adgjmptw0/items/8b00b19bfd6f45a3bdbf)

今回は条件分岐と繰り返しについて書いていきたいと思います。
#条件分岐とは
Javaのプログラムは「順位」「分岐」「繰り返し」という制御構造で構成されます。
Javaはソースコードの上から順番に処理されていきます。
これを「順次」と言います。

```java
public class Main {
	public static void main(String[] args) {
		int a = 1;
		int b = 2;
		int c = a + b;
		System.out.println(c);
	}
}
```
実行結果
![スクリーンショット 2020-11-09 140016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/e97b2a8f-dfbf-5fa6-7df3-e305421ad1a2.png)
上記のように「順次」で進むだけでなく、場合によっては枝分かれになると思います。
例えば朝食でご飯かパンかで悩んだ場合、、、
![スクリーンショット 2020-11-10 120212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/1f024c65-65ba-4ef1-f8cb-736130651d95.png)
このように枝分かれになることを「分岐」と言います。
実際にソースコードを書いてみたいと思います

```java
public class Main {
	public static void main(String[] args) {
		//ご飯かパンかを選択してもらう
		System.out.println("朝食は何を食べますか？");
		System.out.println("ご飯の場合「0」を、パンの場合「1」を入力してください");
		int morning = new java.util.Scanner(System.in).nextInt();
		
		//ご飯だった場合
		if (morning == 0) {
			System.out.println("ご飯とみそ汁とおかずを用意して、、、");
		
		//パンだった場合
		} else {
			System.out.println("トースターで焼いて、バターを塗って、、、");
		}
		
		System.out.println("いただきます！");
	}
}
```
実行結果
※ご飯だった場合
![スクリーンショット 2020-11-10 112414.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/3727efdd-8b3c-504e-2638-64896b8270e3.png)
実際に分岐を行っている部分がこちらです

```java
if (morning == 0) {
    System.out.println("ご飯とみそ汁とおかずを用意して、、、");	
} else {
    System.out.println("トースターで焼いて、バターを塗って、、、");
}
```
この部分をif文と呼びます。人の言葉に直すと
「if（もし）朝食がご飯だった場合、ご飯とみそ汁とおかずを用意する」
「else（そうでなければ）パンを焼いてバターを塗る」
という内容です。
このようにif文を使えば「分岐」することができます。
#繰り返しとは
続いて「繰り返し」について目的地までの距離で例えてみたいと思います。
![スクリーンショット 2020-11-10 141609.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/598d37d4-0eab-53a5-c0df-63a7a180b337.png)
上記の内容をソースコードで書いてみる。

```java
public class Main {
	public static void main(String[] args) {
		//目的地（今回は自動販売機）までの歩数
		int destination = 10;
		System.out.println(destination + "歩先の自販機でジュースを買おう！");
		//歩いた歩数
		int steps = 0;
		
		//目的地に到着するまで繰り返す
		while (steps != destination) {
			System.out.println("一歩進む");
			steps++;
		}
		System.out.println("自販機に到着したのでジュースを買う");
	}
}
```
実行結果
![スクリーンショット 2020-11-10 142932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/d69f9cae-0b3a-aead-50b9-0301017afd90.png)
上記のコードは10歩先にある自動販売機に到着するまで「繰り返し」歩くという内容で実装してみました！
※変な例えで申し訳ない、、、

実際に繰り返している部分は以下になります。

```java
//目的地（今回は自動販売機）までの歩数
int destination = 10;
//歩いた歩数
int steps = 0;		
//目的地に到着するまで繰り返す
while (steps != destination) {
    System.out.println("一歩進む");
    steps++;
}
```
目的地（destination）まで一歩一歩（steps）進んで行くイメージです！
逆に目的地（destination）を0として近づいていくないように修正すると

```java
//目的地（今回は自動販売機）までの歩数
int destination = 0;
//歩いた歩数
int steps = 10;		
//目的地に到着するまで繰り返す
while (steps != destination) {
    System.out.println("一歩近づく");
    steps--;
}
```
そんなに変わりませんが、、、
このようにwhile文は条件が成立する限り、繰り返し処理されます。

#if文、while文の書き方
if文やwhile文のように制御構造を表す文を制御構文と言います。
書き方を以下にまとめたいと思います。

```java
//if文
if (条件式) {
	条件が成立していた時に行われる処理
} else {
	条件と違った場合に行われる処理
}

//while文
while (条件式) {
    条件が成立していた時に行われる処理
}
```
条件式とはif文やwhile文などで利用する式で「処理を分岐する条件」や「繰り返しを続ける条件」を表現するためのものです。

```java
//もし変数numberが0なら
if (number == 0) {}
//もし変数sが「こんにちは」だったら
if (s.equals("こんにちは")) {}

//もし変数numberが20以上なら
while (number >= 20) {}
```
条件式内にある「==」や「>=」は関係演算子と呼ばれます。
関係演算子の種類と意味

|  演算子  |  意味  |
| ---- | ---- |
|  ==  |  左辺と右辺が等しい  |
|  !=  |  左辺と右辺が異なる  |
|  >  |  左辺が右辺より大きい  |
|  <  |  左辺が右辺より小さい  |
|  >=  |  左辺が右辺より大きいか等しい  |
|  <=  |  左辺が右辺より小さいか等しい  |
|  .equals()  |  文字列が等しい()内に比較対象記入  |

```java
//年齢が20歳以上かつ65歳以下
if (age >= 20 && age <= 65) {}
//30歳以下または男性
if (age <= 30 || gender == 0 ) {}
```
条件式内にある「&&」「||」は論理演算子と呼ばれます。
論理演算子の種類と意味

|  演算子  |  意味  |
| ---- | ---- |
|  &&  |  かつ（両方の条件が満たされた場合）  |
|  &#124;&#124;  |  または（どちらか片方の条件さえ満たされれば）  |
#その他の分岐構文、繰り返し構文のバリエーション
###if文のみ構文

```java
if (条件式) {
    条件が成立していた時に行われる処理
}
```
else文が無いため、条件式が当てはまらなかった場合何もしない。
###if-else if-else構文

```java
if (条件式1) {
    条件が成立していた時に行われる処理
} else if (条件式2) {
    条件が成立していた時に行われる処理
} else if (条件式3) {
    条件が成立していた時に行われる処理
} else {
    条件と当てはまらなかった場合に行われる処理
}
```
1つのif文で3つ以上のルートに分岐できる。
###switch構文

```java
switch(条件値)
    case 値1:
        処理1
        break;
    case 値2:
        処理2
        break;
    case 値3:
        処理3
        break;
    default:
        処理4
```
switch文使用できる条件
①条件式が「変数==値」「変数==変数」のように一致するかを比較する式。
②比較する値が整数、文字列または文字であり、少数や真偽値ではない。
※switch文の処理としては条件値と一致する「caseラベル」まで処理をジャンプします。そのため「break文」を忘れてしまうと、「順次」処理が進んでしまいます。
###do-while構文

```java
do{
	ブロック
} while (条件式)
```
while文は初めに条件式を判定（前置判定）して条件に当てはまればブロック内の処理が実行されます。
do-while文はブロック内の処理が行われた後に条件式を判定（後置判定）を行います。
###for文
```java
for (int i = 0; i < 10; i++){
	繰り返し行われる処理
};
```
int型のiが「0」から「10」まで増えて行く（i++の部分）回数、処理が繰り返されます。
#制御構造のネスト
条件分岐や繰り返し文（制御構造は）別の制御構造に入れることができます。
これを「入れ子」または「ネスト」と呼びます。
簡単な九九の例、、、

```java
for (int i = 1; i < 10; i++){
	for (int j = 1; j < 10; j++) {
		System.out.print(i * j);
		System.out.print(" ");
	}
	System.out.println("");
}
```
実行結果
![スクリーンショット 2020-11-11 121241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/d79de014-774d-e8dc-8bb6-ca9d0c094c54.png)
if文、while文、for文などは使い方によって色々遊べると思いますので試してみてください！
#参考文献
https://book.impress.co.jp/books/1113101090

次回は配列について書いていきたいと思います。