Javaのfor文と拡張for文を学ぶ!処理のスキップや中断の方法も紹介。
この記事では、Javaのfor文や拡張for文を使ったループ処理の書き方を勉強していく!
なお、while文はこちらの記事で説明しているので参考にしてほしい。
for文とは?
for文はプログラミングの同じ箇所を複数回、条件を満たすまで繰り返す処理を指示する。つまり、ループと同じ意味と考えていいだろう。
Javaにおけるループの書き方は複数ある。他のプログラマがコードを見たときに理解しやすいような書き方を心がけるといいだろう。
for文の使い方
では、Javaにおけるfor文の使い方を見ていこう!
for文の構文
Javaのfor文は以下のように記述する。
for (int i = 0; i < 12; i++) {
System.out.println((i + 1) + "周目です。");
}
for命令の後のカッコ内を詳しく見てみよう。
for文の制御指示では、セミコロンを使って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); } } }