拡張for文の基本
拡張for文は「配列やリストの中身を、先頭から順番にぜんぶ取り出して処理する」ための短くて読みやすい書き方です。インデックス(0や1などの番号)を使わず、要素そのものだけを扱えます。
for (型 変数名 : 配列やコレクション) {
// 取り出した要素(変数名)を使った処理
}
Java- 左側: 取り出した要素を受け取るための変数(型は要素の型)
- 右側: 回したい対象(配列、Listなどのコレクション)
- 動き: 毎回ひとつずつ要素が変数に入って、ブロックの処理が実行される
まずは超シンプルな例
String[] names = {"Suzuki", "Sato", "Yamada"};<br><br>for (String name : names) {<br> System.out.println(name);<br>}<br>Java- 読み方: namesから1つずつ取り出してnameに入れ、表示する
- インデックス不要:
names[0]などを使わないのでミスが減る - 意図が明確: 「全要素を順番に処理する」がひと目でわかる
よくある実用パターン
合計・平均を計算する
int[] scores = {80, 90, 75};
int sum = 0;
for (int s : scores) {
sum += s;
}
double avg = (double) sum / scores.length;
System.out.println("合計: " + sum + ", 平均: " + avg);
Java- ラベル: 合計は「全部足す」動きがぴったり
文字列を整形する(前後の空白を削る)
String[] raw = {" apple", "banana ", " cherry "};
for (String w : raw) {
String trimmed = w.trim();
System.out.println("[" + trimmed + "]");
}
Java- ラベル: 要素を取り出して加工するのが得意
条件で絞り込む(フィルタ)
int[] nums = {3, 10, 7, 20, 5};
for (int n : nums) {
if (n >= 10) {
System.out.println("10以上: " + n);
}
}
Java- ラベル: 取り出した要素に対して条件分岐
Listでも同じように使える
import java.util.List;
import java.util.ArrayList;
List<String> tasks = new ArrayList<>();
tasks.add("仕様確認");
tasks.add("コードレビュー");
tasks.add("テスト実施");
for (String t : tasks) {
System.out.println("TODO: " + t);
}
Java- ラベル: 配列だけでなく、Listなどのコレクションにもそのまま使える
拡張for文の注意点と使い分け
- インデックスは使えない: 「偶数番目だけ処理したい」「何番目か知りたい」なら通常のfor文にする
// インデックスが必要なとき
for (int i = 0; i < names.length; i++) {
if (i % 2 == 0) { // 偶数番目
System.out.println(names[i]);
}
}
Java- 要素の追加・削除はできない: ループ中にコレクションを安全に削除したいなら、Iteratorなどを使う
- 要素を書き換えて元配列に反映したい場合は注意:
- 参照型の中身を変更するのはOK(例: オブジェクトのフィールドを変更)
- プリミティブ配列の値を上書きしたいならインデックスが必要
int[] arr = {1, 2, 3};
// × 拡張forでは元配列の値差し替えはできない(nはコピーのようなもの)
for (int n : arr) { n = n * 2; }
// ○ インデックスで直接書き換える
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] * 2;
}
Java練習問題と解答例
練習1: 文字列の長さを表示
- 課題: 配列
words = {"java", "python", "go"}の各文字列の長さを表示せよ
String[] words = {"java", "python", "go"};
for (String w : words) {
System.out.println(w + " の長さ: " + w.length());
}
Java練習2: 価格の合計と税計算
- 課題:
prices = {1200, 800, 400}の合計と、税率10%の税込合計を表示せよ
int[] prices = {1200, 800, 400};
int total = 0;
for (int p : prices) {
total += p;
}
int taxIncluded = (int) Math.round(total * 1.10);
System.out.println("合計: " + total + " / 税込: " + taxIncluded);
Java練習3: Listから条件抽出
- 課題:
List<Integer> ages = [12, 19, 21, 16]から18以上だけ表示せよ
import java.util.List;
import java.util.Arrays;
List<Integer> ages = Arrays.asList(12, 19, 21, 16);
for (int age : ages) {
if (age >= 18) {
System.out.println("成人判定: " + age);
}
}
Javaまとめの指針
- 全要素を順番に処理したいときは拡張forが第一候補
- インデックスが必要、要素の差し替えが必要なら通常forやIterator
- 読みやすさ重視: 拡張forは意図が明確で、初心者でも間違いにくい
「この配列(やリスト)を全部回して、1つずつ何かしたい」—そんなときは、まず拡張forで書けないかを考えるとシンプルに仕上がります。
