2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-22

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

前回のVol.4も重要なので、初心者は要チェックです。


Javaの初心者向けおすすめ本

スッキリわかるJava入門 第3版 (スッキリシリーズ)


#繰り返し

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

例えば

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

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

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

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

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

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

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

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

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

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

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

というやつを選びます。すると

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

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

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

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

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

		}

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

	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を使ってみましょう。

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

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

	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週目は夜となるようにしていきます。


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

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

	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のすぐ後ろに

String timeZone = timeZones[i];

としてもともとの

String timeZone = "朝";

は消しましょう。


	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文というものもあります。

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

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?