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


前回に引き続き今回は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文というものもあります。

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

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