Java | 拡張for文(for-each文)

Java Java
スポンサーリンク

拡張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で書けないかを考えるとシンプルに仕上がります。

タイトルとURLをコピーしました