初心者が1から始めるJava開発-Vol.5- 繰り返し編

前回に引き続き今回はJavaの繰り返しについて書いていこうと思います。


前回の[Vol.4](https://qiita.com/soepy/items/cfaa9927042bdd36fcf7)も重要なので、初心者は要チェックです。


---------------------------------
**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;" />

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

#繰り返し

繰り返しとは、そのままですが「何度も処理を繰り返す」ことを言います。
プログラムの世界では超頻出です。

例えば

- 同じ数式で全社員の給与計算をする
- 動画を再生し終えたら、次の動画を自動再生する
- 100ページのPDFとして100人分の社員情報を印字する
etc

など、他にも山ほどあると思いますが、これらも何らかの処理を複数回実行するために、
この**「繰り返し」処理**を実行しています。


では実際にコードで書いていきましょう。

前回のあいさつのプログラムを使います。


#プログラム実装
Greeting.javaを開きましょう。

まず、greetingIfというメソッドを作り、ifの部分をメソッド化しておきましょう。

ifからgreetingSwitchの直前までをctrlキーを押しながらマウスでスクロールし、
if文の部分を選択したら、右クリックで**Refactor > Extract Method**と選択してください。

Method Name:には**greetingIf**と入れてOKを押しましょう。

すると、eclipseが勝手にメソッドを作成してくれたと思います。

これを「リファクタリング」「リファクタ」と言ったりします。
代替の場合は動作（Input/Output）を変えずにコードを書き換えることを言います。
エンジニアやプログラマの現場では頻出単語なので、覚えましょう。

```java
package JavaTutorial;

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

		greetingIf(timeZone);
		greetingSwitch(timeZone);
	}

	private static void greetingIf(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!");

		}
	}

	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;

		}
	}
}

```
全体がこんな感じになっていればOKです。

続いて繰り返し処理を書いていきましょう。

繰り返し処理を書くときは**for**を使います。

mainメソッドのtimeZoneの次の行にforとタイプしてみてください。

```
for - use index for array
```
というやつを選びます。すると

```java
		for (int i = 0; i < args.length; i++) {
	
		}
```

こんな奴が出てきたと思います。これが一番基本的なfor文です。

日本語訳すると、
**i を0からargsの長さまで繰り返し実行する、その時1回実行毎に iは1ずつ増加していく**
という感じです。

今回はargsの中には何も持っていないので、args.lengthの部分を3に書き換えましょう。

```java
		for (int i = 0; i < 3; i++) {

		}
```

こうなります。
で、最後に、forの中にgreetingIfとgreetingswitchを入れて見ましょう。

```java
	public static void main(String[] args) {
		String timeZone = "朝";
		for (int i = 0; i < 3; i++) {
			greetingIf(timeZone);
			greetingSwitch(timeZone);
		}
	}
```
メインクラスはこのようになります。

では実行してみましょう

```
Good Morning World!
Good Morning World!
Good Morning World!
Good Morning World!
Good Morning World!
Good Morning World!
```
のように6回出てくれば成功です。


##アレンジ
これでは面白くないので
iが何番のときなのかを把握するためにforの中でiを使ってみましょう。

```java
System.out.println(i + 1 + "周目");
```

というコードをforのすぐ後ろに書いてみましょう。

```java
	public static void main(String[] args) {
		String timeZone = "朝";
		for (int i = 0; i < 3; i++) {
			System.out.println(i + 1 + "周目");
			greetingIf(timeZone);
			greetingSwitch(timeZone);
		}
	}
```
こんな感じで実行してみてください。

```
1周目
Good Morning World!
Good Morning World!
2周目
Good Morning World!
Good Morning World!
3周目
Good Morning World!
Good Morning World!
```

こうなります。確かに**i**が1個ずつ増えて3週回ったら終わっていることがわかるかと思います。

##さらにアレンジ

今度は1週目は朝、2週目は昼、3週目は夜となるようにしていきます。

```java

String[] timeZones= {"朝","昼","夜"};
String timeZone = "朝";

```
のように、上にtimeZonesという**配列**を宣言してください。
そして、for文の**3**としたところを**timeZones.length**に書き換えます。

```java
	public static void main(String[] args) {
		String[] timeZones = { "朝", "昼", "夜" };
		String timeZone = "朝";
		for (int i = 0; i < timeZones.length; i++) {
			System.out.println(i + 1 + "周目");
			greetingIf(timeZone);
			greetingSwitch(timeZone);
		}
	}
```

最後にforのすぐ後ろに

```java
String timeZone = timeZones[i];
```
としてもともとの

```java
String timeZone = "朝";
```
は消しましょう。


```java

	public static void main(String[] args) {
		// 配列を宣言
		String[] timeZones = { "朝", "昼", "夜" };

		// timeZones.lengthまで回す
		for (int i = 0; i < timeZones.length; i++) {

			// timeZonesの中身のi番目を取得する（配列は1番目が0、2番目が1、・・・となります）
			String timeZone = timeZones[i];

			// 配列から取得したtimeZoneで挨拶を出力していく
			System.out.println(i + 1 + "周目");
			greetingIf(timeZone);
			greetingSwitch(timeZone);
		}
	}
```

こんな感じになります。

では実行してみましょう。



```
1周目
Good Morning World!
Good Morning World!
2周目
Hello World!
Hello World!
3周目
Good Evening World!
Good Evening World!
```


こんな感じになっていれば完璧です。

#最後に
for文には様々な書き方があります。拡張for文、streamなど。
また、forだけでなくwhile文というものもあります。

兎に角書き方が豊富である＝必要な場面が多い

という事なので、ぜひ今回のコードが他に書きようないかいろいろ試してみてください。