6日でできる 新Java入門|制御文③ forループ

決まった回数の修行を美しく回せるようになると、Javaのコードはもっと整う。forループを身につけて、繰り返し処理をスマートに操ろう

Javaで繰り返し処理を学んでいくと、whileループに続いて必ず押さえておきたいのが forループ です。whileループは、条件が成り立つ間くり返すという考え方を理解するのにとても大切でしたが、繰り返す回数や進み方があらかじめ見えている場面では、forループの方がすっきり書けることが多いです。ドラゴンボールの世界でたとえるなら、whileループが まだ修行条件を満たしているかを毎回確認しながら続ける型 だとすると、forループは 最初から何回型稽古を行うかを決め、その回数どおりに正確に回す型 と考えると分かりやすいです。

for文の強みは、初期化、継続条件、更新処理をひとつの場所にまとめて書けることです。そのため、ループの全体像を一目で把握しやすくなります。どこから始めるのか、どこまで続けるのか、1回ごとにどう進むのかが、for文の丸かっこの中に整理されているので、特に回数が決まっている繰り返しではとても読みやすくなります。

この記事では、for文の基本構文、配列との組み合わせ、得点集計のような実用的な使い方、for文のネスト、さらに if文 と組み合わせた条件付きの繰り返しまで、順番に丁寧に見ていきます。Lesson10_1.java から Lesson10_4.java までの例を使いながら、ドラゴンボール風の修行メニューや技確認の流れに置き換えて整理していきます。ここを理解すると、繰り返し処理の書き方がかなり安定してきます。

for文とは何か

for文は、繰り返し処理を簡潔に書くための構文です。特に、何回くり返すのかが見えているときや、配列の要素を先頭から順番に処理したいときにとても便利です。

ドラゴンボール風にいえば、for文は 型稽古の回数表 があらかじめ決まっている修行メニューのようなものです。1回目から何回目まで行うのか、各回が終わったら次へどう進むのかが、最初から整理されています。

for文が向いている場面

場面for文が使いやすい理由
回数が決まっている繰り返し最初から終了までの流れを書きやすい
配列の全要素処理インデックスを順番に進めやすい
表や一覧の出力規則的なくり返しを書きやすい
条件付きの反復if文と組み合わせやすい

このように、for文は 規則的な繰り返し ととても相性がよいです。

for文の基本構文

for文では、初期化、継続条件、更新処理を丸かっこの中にまとめて書きます。

for文の基本形

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

この形はとても大切です。見た目は少し長く感じるかもしれませんが、ループの流れがひとまとまりで見えるのが特徴です。

for文の各部の意味

要素内容
初期化ループ開始時に一度だけ実行する
継続条件条件が true の間くり返す
更新処理各ループの最後に実行する
ブロック実際にくり返し実行される処理

たとえば次のような書き方があります。

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

この場合は、i を 0 から始めて、5 より小さい間だけ処理を続け、1回ごとに i を 1 ずつ増やしています。

ドラゴンボール風にたとえるなら、これは 修行番号 i を 0 から始めて、5回目に達する前まで続け、各回の最後に次の番号へ進む という流れです。

for文の動きを順番に見る

for文は1行にまとまっているぶん、最初は流れが見えにくいことがあります。そこで、実行順を分けて見ると理解しやすくなります。

実行の流れ

順番何が起きるか
1初期化を一度だけ実行する
2継続条件を判定する
3true ならブロックを実行する
4更新処理を実行する
5再び継続条件を判定する

この 2 → 3 → 4 → 2 の流れがくり返されていきます。条件が false になった時点で終了です。

配列とfor文を組み合わせる例

for文は配列と非常に相性がよいです。配列の要素を先頭から順番に取り出して表示するような処理は、for文の代表的な使い方です。

ファイル名:Lesson10_1.java

public class Lesson10_1 {
    public static void main(String[] args) {
        String[] techniques = {"気をためる", "構えを整える", "連続突きを練習する", "集中して呼吸する"};

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

実行結果

1番目の技:気をためる
2番目の技:構えを整える
3番目の技:連続突きを練習する
4番目の技:集中して呼吸する

このプログラムでは、配列 techniques の各要素を、for文で順番に取り出して表示しています。

この例で見たいこと

部分役割
int i = 0最初の要素から始める
i < techniques.length配列の最後まで続ける
i++次の要素へ進む
techniques[i]現在の要素を取り出す
i + 1人に見せる番号を1始まりにする

ここで大切なのは、配列のインデックスは 0 から始まるけれど、人に見せる番号は 1 からにしたいことが多い、という点です。そのため num = i + 1 としています。

配列を使った得点集計の例

for文は、単に表示するだけでなく、くり返しながら条件を調べて集計する処理にも向いています。

ファイル名:Lesson10_2.java

public class Lesson10_2 {
    public static void main(String[] args) {
        int[] targetMoves = {3, 1, 4, 2, 2, 3, 1};
        int[] actualMoves = {3, 2, 4, 2, 1, 3, 1};
        int successCount = 0;

        for (int i = 0; i < targetMoves.length; i++) {
            if (targetMoves[i] == actualMoves[i]) {
                successCount++;
            }
        }

        System.out.println("成功した動きの合計:" + successCount);
    }
}

実行結果

成功した動きの合計:5

このプログラムでは、targetMoves と actualMoves の各位置を順番に比べています。そして一致していたら successCount を 1 増やしています。

この例で大事な流れ

処理内容
配列の同じ位置を比較するtargetMoves[i] == actualMoves[i]
一致したら加算するsuccessCount++
最後に合計を表示する成功回数が分かる

ドラゴンボール風にたとえるなら、これは 師匠が指定した型 と 実際にできた型 を1つずつ見比べて、何回正しくできたかを数えているようなものです。for文があることで、1項目ずつ順番に公平に確認できます。

for文のネストとは何か

for文の中にさらに for文 を書くことを ネスト、または入れ子 と呼びます。これは、表のように 縦と横 の両方をくり返したいときに便利です。

for文のネストの例

ネストの代表例として、ここでは 九九表 を表示するプログラムを見てみます。外側の for文 が段を進め、内側の for文 がその段の中の掛け算を横に並べていきます。

ファイル名:Lesson10_3.java

public class Lesson10_3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                System.out.print(i * j + "\t");
            }
            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
4	8	12	16	20	24	28	32	36
5	10	15	20	25	30	35	40	45
6	12	18	24	30	36	42	48	54
7	14	21	28	35	42	49	56	63
8	16	24	32	40	48	56	64	72
9	18	27	36	45	54	63	72	81

このプログラムでは、外側の i が 1段目から9段目までの行を担当しています。そして内側の j が、その段の中で 1から9までを順番に掛けて横に並べています。1行分が終わったら System.out.println(); で改行し、次の段へ進みます。

ネストの考え方

ループ役割
外側の for行を進める
内側の for列を進める

この構造を理解すると、表形式の出力や、二重にくり返す処理がかなり分かりやすくなります。九九表は見た目にも規則がはっきりしているので、for文のネストを学ぶ題材としてとても相性がよいです。

9×9の九九表で意識したいこと

部分意味
int i = 11の段から始める
i <= 99の段まで進める
int j = 1各段の最初の掛ける数は1
j <= 9各段で9まで横に並べる
System.out.print(i * j + "\t")計算結果を同じ行に続けて出す
System.out.println()1段分が終わったら改行する

ここでは print と println の使い分けも大切です。内側のループでは同じ行に結果を横並びで表示したいので print を使い、外側のループの最後で改行するために println を使っています。

if文とfor文の組み合わせ

for文は、ただ全てをくり返すだけでなく、条件に合うものだけを処理するのにも使えます。そのときに組み合わせるのが if文 です。

たとえば 1から10までの中で偶数だけを表示する といった処理は、for文とif文の代表的な組み合わせです。ここでは偶数の回だけ特別修行を行う流れに置き換えてみます。

ファイル名:Lesson10_4.java

public class Lesson10_4 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 == 0) {
                System.out.println(i + "回目の修行は偶数回の特訓日です");
            }
        }
    }
}

実行結果

2回目の修行は偶数回の特訓日です
4回目の修行は偶数回の特訓日です
6回目の修行は偶数回の特訓日です
8回目の修行は偶数回の特訓日です
10回目の修行は偶数回の特訓日です

このプログラムでは、1から10まで順番に見ていき、その中で i % 2 == 0 が true のときだけ表示しています。

この条件の意味

意味
i % 22で割った余り
i % 2 == 0余りが0なので偶数

ここでは for文が 全体を順番に進める役、if文が その中で条件に合うものだけを選ぶ役 を持っています。この組み合わせはかなりよく使います。

while文とfor文の違い

ここまで for文 を見てきましたが、while文との違いも整理しておくと理解が深まります。どちらも繰り返し処理ですが、得意な場面が少し違います。

while文とfor文の比較

項目while文for文
条件の見え方条件中心で書く回数や進行をまとめて書ける
向いている場面終了条件が中心のとき回数やインデックスが明確なとき
配列処理書ける特に書きやすい
見た目初期化と更新が別になりやすい1行にまとまってすっきりする

ドラゴンボール風にたとえるなら、while文は まだ条件を満たしているかを見ながら続ける修行、for文は 最初から決められた回数どおりに型を回す修行 です。どちらも大事ですが、今回のテーマでは for文 が 回数の見通しのよさ で力を発揮します。

forループの流れを図で整理

下図はは、for文が 初期化 → 条件判定 → 処理実行 → 更新処理 → 再判定 という流れで進むことを示したものです。while文との違いとして、初期化と更新処理が最初からまとまっていることも分かります。

↓クリックすると拡大表示されます。

この図から分かること

この図を見ると、for文は ただくり返す のではなく、開始、継続、更新の3つがまとまった構造を持っていることが分かります。

配列とfor文の組み合わせを図で整理

下図は、for文のループ変数 i が 0 から始まり、配列の各要素を順番に指しながら、length に達する前まで取り出していく流れを示したものです。i の値と配列のインデックスの対応が見えるため、なぜ i < 配列.length という条件になるのかが自然に理解できます。

この図から分かること

この図を見ると、for文の i が配列のインデックスと対応しながら、先頭から順番に要素を取り出していることが分かります。配列とfor文が相性のよい理由もつかみやすくなります。

forループを理解すると、繰り返し処理がかなり整って見えるようになる

for文は、繰り返し処理の中でもとてもよく使う基本構文です。初期化、継続条件、更新処理がまとまっているので、回数の見通しが立ちやすく、配列処理や集計処理とも自然につながります。さらに、if文と組み合わせたり、入れ子にしたりすることで、表の出力や条件つきの繰り返しまで柔軟に書けるようになります。

ドラゴンボールの修行でも、ただ同じ動きを続けるだけではなく、何回行うか、どこまで進めるか、条件に合う動きだけを選ぶかを整理することで、修行の質が上がっていきます。Javaの forループ も同じで、繰り返し処理を見通しよく整えるための、とても強力な型です。