Java超|繰り返し処理とfor文の基本

同じ処理は、for文にまかせよう。
繰り返しを使えるようになると、Javaの処理は「何度も同じ技を出す修行」から「回数を管理して動くスマートな型」へ進化する。

これまで学んできた条件分岐では、「条件に合うときだけ処理する」「条件に合わないときは別の処理をする」といった流れを作れるようになりました。

ただし、プログラムでは条件分岐だけでは足りない場面もたくさんあります。

たとえば、

やりたいこと手作業で書くとどうなるか
同じメッセージを4回表示したい同じような表示文を4回書く必要がある
1回目、2回目、3回目のように表示したい回数ごとに似た処理を書く必要がある
入力された数だけ記号を並べたい入力値に合わせて処理回数を変える必要がある
1から指定した数までの偶数だけ足したい数を順番に確認しながら条件判定する必要がある

このような場面で、同じような処理を何行も手で書くのは大変です。
そこで使うのが、繰り返し処理、つまりループです。

Javaには代表的な繰り返し文として、for文、while文、do~while文があります。
その中でも for文 は、回数を数えながら処理を繰り返したいときによく使われます。

ドラゴンボール風にたとえると、for文は「決められた回数だけ型の修行を繰り返す仕組み」です。

1回目の素振り、2回目の素振り、3回目の素振り……というように、回数を数えながら同じ修行を続けます。
そして、条件を満たさなくなったら修行を終えて、次の行動へ進みます。

繰り返し処理とは何か

繰り返し処理とは、ある処理を何度も実行することです。

日常生活でも、繰り返しはよくあります。

日常の例繰り返しの考え方
毎朝の準備毎日同じ流れを行う
修行の素振り決められた回数だけ繰り返す
任務前の確認必要な項目を順番に確認する
掃除決めた範囲が終わるまで続ける

プログラムでも同じように、同じ処理を何度も行いたい場面があります。

やりたいこと繰り返しの考え方
メッセージを5回表示する5回同じ表示を繰り返す
1から10まで順に処理する数字を1つずつ増やしながら処理する
入力された数だけ記号を表示する入力値を回数として使う
偶数だけを足す繰り返しの中で条件分岐を使う

もし繰り返し文を使わなければ、同じような処理を何行も書く必要があります。

たとえば、同じメッセージを4回表示したい場合、繰り返しを使わないと次のようになります。

System.out.println("今日もJavaの型を練習しています。");
System.out.println("今日もJavaの型を練習しています。");
System.out.println("今日もJavaの型を練習しています。");
System.out.println("今日もJavaの型を練習しています。");

4回ならまだ読めますが、これが10回、100回、1000回になると大変です。

for文を使えば、繰り返したい処理を1つのまとまりとして書き、必要な回数だけ実行できます。

ドラゴンボール風にたとえると、繰り返し処理は「型の反復修行」です。

同じ型を何度も繰り返すことで、動きが安定します。
Javaでも、同じ処理を繰り返すことで、効率よくプログラムを動かせます。

for文の基本

for文は、繰り返し処理を行うための代表的な構文です。

基本の形は次のようになります。

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

for文の丸かっこの中には、3つの要素があります。

部分役割
初期化最初に1回だけ実行される。カウンタ変数を準備する
条件式繰り返しを続けるかどうかを判定する
変化式1回処理するたびに値を変化させる

たとえば、1から5まで数えながら処理したい場合は、次のように書けます。

for(int i = 1; i <= 5; i++){
    処理
}

このfor文では、i という変数を使って回数を管理しています。

部分内容
int i = 1i を1から始める
i <= 5i が5以下の間は繰り返す
i++1回終わるたびに i を1増やす

この形では、i が 1、2、3、4、5 の間だけ処理が実行されます。

i が 6 になると、i <= 5 が false になるため、繰り返しは終了します。

ドラゴンボール風にたとえると、i は「修行回数を数えるカウンター」です。

1回目から始めて、5回目まで修行を続けます。
6回目になった瞬間、「もう決めた回数を超えた」と判断して修行を終えます。

for文の流れ

for文は、次の順番で動きます。

順番内容
1初期化を行う
2条件式を確認する
3条件が true ならブロック内の処理を実行する
4変化式を実行する
5もう一度、条件式を確認する
6条件が false になったら終了する

大切なのは、初期化は最初に1回だけ行われることです。

その後は、

条件確認 → 処理 → 変化式 → 条件確認 → 処理 → 変化式

という流れを繰り返します。

ドラゴンボール風にたとえると、for文は次のような修行の流れです。

for文の要素ドラゴンボール風のイメージ
初期化修行1回目から始める
条件式まだ修行回数が残っているか確認する
処理型の修行を行う
変化式修行回数を1つ進める
条件が false修行終了

たとえば、for(int i = 1; i <= 4; i++) の場合は、次のように進みます。

i の値i <= 4動き
1true処理を実行する
2true処理を実行する
3true処理を実行する
4true処理を実行する
5falseループを終了する

i が5になった時点で、条件式 i <= 4 が false になります。
そのため、for文の中の処理は実行されず、次の処理へ進みます。

図:for文の基本の流れ

この図が示していること

この図では、for文がどの順番で動くのかを示しています。

まず int i = 1 のように、カウンタ変数を準備します。
次に i <= 4 のような条件式を確認します。

条件が true ならブロック内の処理を実行します。
その後、i++ によって i を1増やし、再び条件式を確認します。

条件式が false になると、ループは終了します。

ここから分かることは、for文はただ同じ処理を機械的に実行しているのではなく、毎回条件を確認しながら繰り返しているということです。

for文で同じ処理を繰り返す

まずは、同じメッセージを4回表示するシンプルなプログラムを見ていきます。

ファイル名:Sample1.java

class Sample1
{
    public static void main(String[] args)
    {
        for(int i = 1; i <= 4; i++){
            System.out.println("今日もJavaの型を練習しています。");
        }

        System.out.println("型の練習メッセージの表示が終わりました。");
    }
}

実行結果は次のようになります。

今日もJavaの型を練習しています。
今日もJavaの型を練習しています。
今日もJavaの型を練習しています。
今日もJavaの型を練習しています。
型の練習メッセージの表示が終わりました。

このプログラムでは、次のfor文が使われています。

for(int i = 1; i <= 4; i++){
    System.out.println("今日もJavaの型を練習しています。");
}

i は1から始まり、i <= 4 が true の間、メッセージを表示します。
1回表示するたびに i++ によって i が1増えます。

i の値条件 i <= 4実行される処理
1trueメッセージを表示
2trueメッセージを表示
3trueメッセージを表示
4trueメッセージを表示
5falseループ終了

i が5になると、i <= 4 が false になります。
そのため、繰り返しは終わります。

最後のメッセージは for文 の外にあります。

System.out.println("型の練習メッセージの表示が終わりました。");

そのため、繰り返しが終わったあとに1回だけ表示されます。

ドラゴンボール風にたとえると、4回の型修行が終わったあとに、修行終了の合図を出している流れです。

ループ変数を使うと何回目かが分かる

for文で使う i のような変数は、繰り返しの回数を管理する役割を持ちます。

このような変数は、カウンタ変数と呼ばれることがあります。

カウンタ変数をループの中で使うと、「今は何回目なのか」を表示できます。

カウンタ変数の使い方できること
i を表示する何回目かが分かる
i を計算に使う番号に応じて処理できる
i を条件に使う特定の回だけ処理できる
i を合計に使う数値を順番に足せる

繰り返し処理は、ただ同じことを何度もするだけではありません。

カウンタ変数を使えば、回数に応じて少しずつ変化する処理も書けます。

ドラゴンボール風に言えば、毎回同じ型を出しながらも、「今は何回目の修行か」「何番目の任務か」を確認しながら進められるということです。

何回目の処理かを表示する

次は、何回目のあいさつなのかを表示するプログラムです。

ファイル名:Sample2.java

class Sample2
{
    public static void main(String[] args)
    {
        for(int i = 1; i <= 5; i++){
            System.out.println(i + "回目のあいさつです。おはようございます。");
        }

        System.out.println("あいさつの表示が終わりました。");
    }
}

実行結果は次のようになります。

1回目のあいさつです。おはようございます。
2回目のあいさつです。おはようございます。
3回目のあいさつです。おはようございます。
4回目のあいさつです。おはようございます。
5回目のあいさつです。おはようございます。
あいさつの表示が終わりました。

このプログラムでは、ループのたびに i の値が変化しています。

繰り返しi の値表示される内容
1回目11回目のあいさつです。おはようございます。
2回目22回目のあいさつです。おはようございます。
3回目33回目のあいさつです。おはようございます。
4回目44回目のあいさつです。おはようございます。
5回目55回目のあいさつです。おはようございます。

i を文字列の中で使うことで、同じ表示の中にも変化をつけられます。

ドラゴンボール風にたとえると、1回目の型、2回目の型、3回目の型……と、修行回数を声に出しながら進めているようなイメージです。

ループ内で使う変数の役割

for文の中で使う変数には、いろいろな役割があります。

役割例
回数を数える1回目、2回目、3回目
番号を表す1番の任務、2番の任務
値を順番に変える1から10まで増やす
条件の判定材料にする何回繰り返したかで終了する
合計計算に使う1から順に足す

for文を読むときは、「この変数が今どんな値なのか」を意識すると分かりやすくなります。

たとえば、i <= 5 という条件があるなら、i が5以下の間は処理が続きます。
i++ があるなら、1回ごとに i が1増えます。

この2つが見えるだけでも、for文の流れをかなり追いやすくなります。

変数の使える範囲に注意する

for文の中で宣言した変数は、基本的にその for文 の中だけで使えます。

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

この i は、for文の外では使えません。

宣言場所使える範囲
for文の中で int i = 1 と宣言そのfor文の中だけ
for文の前で int i; と宣言for文のあとでも使える

ループが終わったあとにも i を使いたい場合は、for文の外で先に宣言しておきます。

int i;

for(i = 1; i <= 5; i++){
    System.out.println(i + "回目の処理です。");
}

System.out.println((i - 1) + "回くり返しました。");

ここで i - 1 としているのは、ループ終了時の i が、条件を満たさなくなった値まで進んでいるからです。

たとえば、i <= 5 で繰り返した場合、最後に i++ されて i は6になります。
そのため、実際に繰り返した回数を表示したいなら、i - 1 を使うと5になります。

状態i の値
5回目の処理中5
5回目のあとに i++6
条件 i <= 5false
実際の回数i - 1 で5

入力した回数だけ記号を表示する

for文は、決まった回数だけでなく、入力された数だけ繰り返すこともできます。

ここでは、入力された数だけ ● を表示します。

ファイル名:Sample3.java

import java.io.*;

class Sample3
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("いくつ●を表示しますか?");

        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        int num = Integer.parseInt(str);

        for(int i = 1; i <= num; i++){
            System.out.print("●");
        }
    }
}

実行例は次のようになります。

いくつ●を表示しますか?
6
●●●●●●

このプログラムでは、入力された値 num を条件式に使っています。

for(int i = 1; i <= num; i++){
    System.out.print("●");
}

num が6なら、i は1から6まで変化します。
そのため、● が6個表示されます。

入力された値ループ回数表示される記号
33回●●●
66回●●●●●●
1010回●●●●●●●●●●

このように、for文は固定回数だけでなく、実行時に決まる回数にも対応できます。

ドラゴンボール風にたとえると、任務前に「何回型を練習するか」を入力し、その回数だけ型の印を並べていくようなイメージです。

図:入力された数だけ繰り返す

この図が示していること

この図では、入力された値 num を使って、for文の繰り返し回数を決める流れを示しています。

num が6なら、i は1から6まで変化します。
そのため、● が6個表示されます。

num が3なら3回、num が10なら10回のように、入力値によって繰り返し回数が変わります。

ここから分かることは、for文は固定された回数だけでなく、実行時に決まった値を使って繰り返し回数を制御できるということです。

繰り返しを使って合計を求める

次は、for文と if文 を組み合わせて、1から入力した数までの偶数の合計を求めるプログラムです。

ファイル名:Sample4.java

import java.io.*;

class Sample4
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("いくつまでの偶数の合計を求めますか?");

        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        int num = Integer.parseInt(str);

        int sum = 0;

        for(int i = 1; i <= num; i++){
            if(i % 2 == 0){
                sum += i;
            }
        }

        System.out.println("1から" + num + "までの偶数の合計は" + sum + "です。");
    }
}

実行例は次のようになります。

いくつまでの偶数の合計を求めますか?
10
1から10までの偶数の合計は30です。

このプログラムでは、1から num まで順番に i を変化させます。

for(int i = 1; i <= num; i++){
    if(i % 2 == 0){
        sum += i;
    }
}

for文の中で、if文を使って偶数かどうかを判定しています。

if(i % 2 == 0)

i % 2 は、i を2で割った余りを求めます。
余りが0なら、i は偶数です。

偶数だった場合だけ、sum に i を加えています。

sum += i;

num が10の場合、次のように計算されます。

i の値偶数かどうかsum の変化
1いいえ0
2はい0 + 2 = 2
3いいえ2
4はい2 + 4 = 6
5いいえ6
6はい6 + 6 = 12
7いいえ12
8はい12 + 8 = 20
9いいえ20
10はい20 + 10 = 30

このように、for文とif文を組み合わせると、繰り返しながら条件に合うものだけを処理できます。

ドラゴンボール風にたとえると、1番から10番までの任務札を順番に確認し、偶数番号の札だけを集めて合計しているような流れです。

図:for文とif文を組み合わせて偶数だけ足す

この図が示していること

この図では、for文とif文を組み合わせて、偶数だけを合計する流れを示しています。

for文によって、i の値を1から num まで順番に確認します。
その中で、i % 2 == 0 という条件を使って、偶数かどうかを判定します。

偶数なら sum += i によって合計に加えます。
奇数なら何も足さず、次の数へ進みます。

num が10の場合は、2、4、6、8、10 が足され、合計は30になります。

ここから分かることは、for文は回数や順番を管理し、if文はその中で条件に合うものだけを選ぶ役割を持つということです。

for文では複数の文も繰り返せる

for文の中では、1文だけでなく、複数の文をまとめて繰り返せます。

そのときに使うのがブロックです。

for(int i = 1; i <= 3; i++){
    System.out.println("現在の番号は" + i + "です。");
    System.out.println("次の処理へ進みます。");
}

このように書くと、{ } の中にある2つの文がセットで繰り返されます。

書き方意味
文を1つだけ書くその1文だけが繰り返される
{ } で囲む囲まれた文すべてが繰り返される

実際のプログラムでは、繰り返したい処理が複数行になることが多いです。

そのため、for文ではブロックを使う書き方に慣れておくと安心です。

ドラゴンボール風にたとえると、ブロックは「1回の修行で行う一連の動き」です。

構える。
型を出す。
次の型へ進む。

これらを1セットとして、何度も繰り返します。

いろいろなfor文の書き方

for文は、初期値、条件式、変化式を変えることで、さまざまな繰り返しに対応できます。

0から9までの10回繰り返し

for(int i = 0; i < 10; i++){
    処理
}

この書き方では、i は0から9まで変化します。
合計10回繰り返されます。

1から10まで順に処理する

for(int i = 1; i <= 10; i++){
    処理
}

この書き方では、i は1から10まで変化します。
番号をそのまま表示したいときに分かりやすい形です。

10から1へ逆向きに処理する

for(int i = 10; i >= 1; i--){
    処理
}

この書き方では、i は10から1へ減っていきます。
カウントダウンや逆順処理に使いやすい形です。

書き方動き
i = 0; i < 10; i++0から9まで扱う
i = 1; i <= 10; i++1から10まで扱う
i = 10; i >= 1; i--10から1まで扱う

特に、< と <= の違いは大切です。

条件式含まれる値
i < 1010は含まれない
i <= 1010も含まれる

この違いで、繰り返し回数が変わります。

最初のうちは、実際に i の値を書き出して確認すると理解しやすいです。

for文でよくあるつまずき

for文は便利ですが、最初のうちは似たミスをしやすいです。

よくあるミス内容
条件式の書き間違い< と <= の違いで回数がずれる
増減のし忘れi++ を書かないと終わらないループになることがある
開始値のミス1から始めるつもりが0から始めてしまう
変数の範囲の誤解for文の中で宣言した変数を外で使おうとする
ブロックの範囲の誤解どこまでが繰り返されるか分からなくなる

たとえば、次のコードは注意が必要です。

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

このfor文には、i++ のような変化式がありません。

そのため、i の値が変わらず、i <= 5 がずっと true のままになる可能性があります。

このように、条件がいつ false になるのかを考えることが大切です。

見るポイント理由
初期値どこから始まるか分かる
条件式いつまで繰り返すか分かる
変化式値がどう変わるか分かる
ブロック何を繰り返すか分かる

ドラゴンボール風にたとえると、修行回数を進める合図を忘れると、ずっと1回目の修行から抜け出せないようなものです。

for文では、初期化、条件式、変化式の3つがそろっているかを確認することが大切です。

for文は短くても強力

for文のよいところは、少ないコードで多くの処理を表現できることです。

同じ処理を10回書こうとすると、手で10行並べる必要があります。
しかし、for文なら、繰り返し回数を条件で管理できます。

また、ループ変数を使えば、ただ同じことを繰り返すだけでなく、次のような処理も書けます。

できること内容
回数の表示1回目、2回目のように表示する
番号付きの処理番号を使って処理する
合計の計算数値を順番に足す
条件に合うものだけ処理if文と組み合わせる
入力値に応じた回数の処理入力された数だけ繰り返す

for文は、同じ処理を繰り返すための文であり、回数や順序を管理するための文でもあります。

ドラゴンボール風にたとえると、for文は「ただ同じ型を繰り返すだけの修行」ではありません。

何回目かを数えたり、偶数回だけ特別な型を出したり、指定された回数だけ印を刻んだりできます。

繰り返し処理を学ぶ意味

Javaを学んでいくと、繰り返し文は何度も出てきます。

配列、文字列処理、入力の連続処理、ゲームのロジック、表の出力など、さまざまな場面でループが使われます。

今後の学習内容for文とのつながり
配列要素を順番に取り出す
文字列処理文字を1つずつ確認する
入力処理複数回入力を受け取る
表の出力行や列を繰り返して表示する
ゲーム処理ターンや回数を管理する
合計や平均値を順番に集計する

for文を理解すると、Javaのコードを読む力も書く力もかなり伸びます。

繰り返し処理を読むときは、次の点を意識すると理解しやすいです。

意識したいこと理由
変数がどう変化しているかを見るループの動きが見える
条件がいつ false になるかを考える終了のタイミングが分かる
何回繰り返されるかを数える回数のミスを見つけやすい
ブロックの中の処理を確認するどこまでが繰り返されるか分かる

for文は、最初は丸かっこの中が少し長く見えるかもしれません。

でも、初期化、条件式、変化式の3つに分けて見れば、かなり読みやすくなります。

ドラゴンボール風にたとえると、for文は「回数を決めて型を磨く反復修行」です。

何回繰り返すのか。
そのたびに何をするのか。
いつ終わるのか。

この3つを意識できるようになると、Javaの繰り返し処理はぐっと理解しやすくなります。