Javaのfor文と拡張for文を学ぶ!処理のスキップや中断の方法も紹介。

Javaのfor文と拡張for文を学ぶ!処理のスキップや中断の方法も紹介。

この記事では、Javaのfor文や拡張for文を使ったループ処理の書き方を勉強していく!

なお、while文はこちらの記事で説明しているので参考にしてほしい。

UgoCompiler

当サイトでは、自作のJavaCompiler「UgoCompiler」を用意している。UgoCompilerを使えばオンライン上で気軽に自分の書いたコードを実行することができる。 登録なしですぐに使うことができるので、ぜひ試してみてほしい! (下の写真をクリックすると新しいタブで開きます。)

for文とは?

for文はプログラミングの同じ箇所を複数回、条件を満たすまで繰り返す処理を指示する。つまり、ループと同じ意味と考えていいだろう。

Javaにおけるループの書き方は複数ある。他のプログラマがコードを見たときに理解しやすいような書き方を心がけるといいだろう。

for文の使い方

では、Javaにおけるfor文の使い方を見ていこう!

for文の構文

Javaのfor文は以下のように記述する。

for (int i = 0; i < 12; i++) {
	System.out.println((i + 1) + "周目です。");
}

for命令の後のカッコ内を詳しく見てみよう。

for文の制御指示では、セミコロンを使って3つの要素を指定する。

  1. ひとつ目の値はループで使用する変数
  2. ふたつ目の値はループが終わる条件
  3. 3つ目の値は変数の変化

ループの際に行う指示内容は波カッコの中に記述する。

処理をスキップする continue 

特定の条件の時に波カッコ内の指示をスキップしたい場合はcontinue命令を使用する。

for (int i = 0; i < 12; i++) {
if (i == 5) continue;
System.out.println((i + 1) + "周目です。");
}

上の例ではiの値が5であった場合は処理がスキップされる。

処理を中断する break

特定の条件の時にループを中断したい場合はbreak命令を使用する。

for (int i = 0; i < 12; i++) {
if (i == 5) break;
System.out.println((i + 1) + "周目です。");
}

break命令が呼ばれるとループは中断される。

拡張for文

次に拡張for文の使い方や記述ルールについて勉強しよう。

拡張for文は配列やリストをイテレーションするためのfor文。イテレーションとは配列に格納された値を順番に処理・表示することを指す。

String[] nameArray = {"田中", "佐藤", "渡辺"};
for (String name: nameArray) {
	System.out.println(name);
}

拡張for文ではfor命令の後のカッコ内の左側にデータ型と変数名、右側にイテレーションする配列やリストの名前を記述する。

forEach文

forEach分は拡張for文と同様に配列やリストに格納された値を処理・表示するためのオペレーターだ。

ArrayList<String> nameArray = new ArrayList<>(Arrays.asList("田中", "佐藤", "渡辺"));
nameArray.forEach(System.out::println);

forEach文を使って配列をイテレーションする場合はArraysクラスのstreamメソッドを使用する。

String[] nameArray = {"田中", "佐藤", "渡辺"};
Arrays.stream(nameArray).forEach(System.out::println);

この記事のサンプルコード

以下がこの記事のサンプルコードだ。ぜひ、コードを書き換えてみてfor文の挙動がどう変わるか確認してみてほしい。

import java.util.Arrays;

class ForLoopExample {

    public static void main(String[] args) {

        String[] emails = {"61f71@hmto.net",
                           "v3ss_@yivzf.com",
                           "gukzvycqah@vizpgq.ac.jp",
                           "enotzpd@dayes.co.jp",
                           "vo6isaomn@amqiky.org"};

        System.out.println("*** 一般的なfor文");
        for (int i = 0; i < emails.length; i++) {
            System.out.print(emails[i] + ",");
        }

        System.out.println("\n\n*** continueを使った例");
        for (int i = 0; i < emails.length; i++) {
            if (emails[i].contains("jp")) continue;
            System.out.print(emails[i] + ",");
        }

        System.out.println("\n\n*** breakを使った例");
        for (int i = 0; i < emails.length; i++) {
            System.out.print(emails[i] + ",");
            if (emails[i].contains("com")) break;
        }

        System.out.println("\n\n*** 拡張for文の例");
        for (String email: emails) {
            System.out.print(email + ",");
        }

        System.out.println("\n\n*** foreach文の例");
        Arrays.stream(emails).forEach(email -> System.out.print(email + ","));

        System.out.println("\n\n*** 2重ループの例");
        String[] topLevels = {"net", "com", "co.jp", "jp"};
        for (int i = 0; i < emails.length; i++) {
            boolean isFound = false;
            for (int j = 0; j < topLevels.length; j++) {
                if (emails[i].contains(topLevels[j])) {
                    isFound = true;
                    break;
                }
            }
            if (!isFound) System.out.print(emails[i] + "のトップレベルドメインが見つかりませんでした。");
        }

        System.out.println("\n\n*** 再帰処理の例。階乗を求めるプログラム。");
        System.out.println("結果は" + ForLoopExample.factorial(4));
    }

    public static int factorial(int n) {
        System.out.println("メソッドが呼ばれました。引数は"+ n);
        if (n <= 1) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }
}