Java入門 #8 - for文(繰り返し)

入門 | 10分 で読める | 2026.05.02

公式ドキュメント

この記事の要点

基本for文は初期化・条件・更新を1行で書ける定番構文
拡張for(for-each)は配列やコレクションの全要素を簡潔に処理
break でループを抜け、continue で次の繰り返しへスキップ

このシリーズについて

「Java入門」は1本1テーマで進む全15回のシリーズです。本記事はその第8回として、**for文(繰り返し)**を解説します。

前提条件: Java入門 #1 - 開発環境構築 でJDK 21 がインストール済み。条件分岐(if文)の基礎を理解済み。

for文とは

for 文は、同じ処理を繰り返し実行するための制御構文です。回数が決まっている繰り返しに向いています。

for (初期化; 条件式; 更新式) {
    // 繰り返したい処理
}

実例を見ましょう。

// Java 21
public class ForBasic {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println("i = " + i);
        }
    }
}

実行すると以下のように出力されます。

i = 0
i = 1
i = 2
i = 3
i = 4

for文の動作フロー

上記のコードは以下の順序で実行されます。

ステップ内容実行回数
1. 初期化int i = 01回だけ
2. 条件チェックi < 5true か確認毎回
3. ブロック実行System.out.println(...)条件が真の間
4. 更新i++(i を1増やす)毎回
5. 2に戻る条件が false になるまで繰り返す

ポイント: 初期化は最初の1回だけ実行されます。ループ変数 i は for文の中でのみ有効(スコープがブロック内)です。

配列との組み合わせ

配列の要素を順に処理するのに for 文はよく使われます。

// Java 21
public class ArrayLoop {
    public static void main(String[] args) {
        String[] fruits = {"りんご", "バナナ", "オレンジ"};

        for (int i = 0; i < fruits.length; i++) {
            System.out.println((i + 1) + "番目: " + fruits[i]);
        }
    }
}

出力:

1番目: りんご
2番目: バナナ
3番目: オレンジ

fruits.length で配列の長さを取得し、それを条件式で使います。

拡張for(for-each文)

配列やコレクションの全要素を順に処理するだけなら、拡張for文(for-each)が簡潔です。

for (型 変数名 : 配列またはコレクション) {
    // 繰り返したい処理
}

先ほどの例を拡張forで書き直します。

// Java 21
public class ForEach {
    public static void main(String[] args) {
        String[] fruits = {"りんご", "バナナ", "オレンジ"};

        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

出力:

りんご
バナナ
オレンジ

補足: 拡張forはインデックス(i)が不要な場合に便利ですが、インデックスが必要なときは基本for文を使いましょう。

基本for vs 拡張for の使い分け

状況推奨構文
全要素を順に処理(インデックス不要)拡張for
インデックスが必要(「何番目」を表示など)基本for
逆順に処理基本for
要素をスキップしたい基本for
カウンタを2ずつ増やすなど特殊な更新基本for

break でループを抜ける

break を使うと、ループを途中で抜けることができます。

// Java 21
public class BreakExample {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                System.out.println("5に到達したので終了");
                break;
            }
            System.out.println(i);
        }
    }
}

出力:

0
1
2
3
4
5に到達したので終了

i が5になった時点でループが終了します。

continue で次の繰り返しへスキップ

continue を使うと、その回の処理をスキップして次の繰り返しに進みます。

// Java 21
public class ContinueExample {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            if (i == 2) {
                continue; // 2のときはスキップ
            }
            System.out.println(i);
        }
    }
}

出力:

0
1
3
4

i が2のときだけ System.out.println(i) が実行されません。

ループ制御文の早見表

キーワード動作使い所
breakループを即座に終了条件を満たしたら抜ける
continue現在の繰り返しをスキップし次へ特定の要素を飛ばしたい
returnメソッド全体から抜けるループの中でも使える

注意: breakcontinue はネストしたループでは最も内側のループにのみ影響します。外側のループを抜けたい場合はラベル付き break を使います(後述)。

ネストしたfor文

for文の中に別のfor文を入れることができます(ネスト)。

// Java 21
public class NestedLoop {
    public static void main(String[] args) {
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                System.out.print(i + "×" + j + "=" + (i * j) + "  ");
            }
            System.out.println(); // 改行
        }
    }
}

出力:

1×1=1  1×2=2  1×3=3  
2×1=2  2×2=4  2×3=6  
3×1=3  3×2=6  3×3=9  

外側のループが1回実行されるごとに、内側のループが全回実行されます。

実例:九九の表

ネストしたループで九九の表を作成します。

// Java 21
public class MultiplicationTable {
    public static void main(String[] args) {
        System.out.println("九九の表");
        System.out.println("----------------------------");

        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                System.out.printf("%2d ", i * j); // 2桁で右寄せ
            }
            System.out.println();
        }
    }
}

出力(一部):

九九の表
----------------------------
 1  2  3  4  5  6  7  8  9 
 2  4  6  8 10 12 14 16 18 
 3  6  9 12 15 18 21 24 27 
...

補足: System.out.printf() は書式指定付き出力です。%2d は「2桁の整数、右寄せ」を意味します。

ラベル付きbreak(応用)

ネストしたループで外側のループを抜けたいときは、ラベルを使います。

// Java 21
public class LabeledBreak {
    public static void main(String[] args) {
        outer:
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == 1 && j == 1) {
                    System.out.println("外側ループを終了");
                    break outer; // outerラベルのループを抜ける
                }
                System.out.println("i=" + i + ", j=" + j);
            }
        }
        System.out.println("ループ終了後");
    }
}

出力:

i=0, j=0
i=0, j=1
i=0, j=2
i=1, j=0
外側ループを終了
ループ終了後

よくあるミス

ミス説明対策
i = 0; i <= 5; i++6回実行される(0〜5)i < 5 にする
for (int i = 0; i < arr.length; i++)arr[i+1] にアクセスIndexOutOfBoundsException範囲をチェックする
無限ループ for (;;)条件式がないと永遠に実行必ず終了条件を設ける
拡張forで要素を変更しようとする配列の中身は変えられない基本forを使う

注意: 拡張forではループ変数に代入しても元の配列は変わりません。要素を変更したい場合は基本forとインデックスを使います。

次のステップ

Java入門 #9 - while文とdo-while文 で、回数が決まっていない繰り返しを扱う方法を学びます。

参考リソース

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

メールで無料相談する
← 一覧に戻る