Java入門|繰り返し処理(ループ)

以下、いただいた文章をもとに、内容をアレンジしながら「繰り返し処理(ループ)」をやさしく詳しく解説します。元の題材はこのアップロード文書に基づいています。

同じ処理は、くり返しにまかせよう。Javaのループがわかると、プログラムはもっとスマートになる。

これまで学んできた条件分岐では、「条件に合うときだけ処理する」「条件に合わないときは別の処理をする」といった流れを作ることができました。けれども、プログラムではそれだけでは足りない場面がたくさんあります。

たとえば、同じメッセージを10回表示したいとき、1から100までの合計を求めたいとき、ある条件を満たすまで何度も処理を続けたいときなどです。こうした場面では、同じような処理を何度も書き並べるのではなく、ひとまとまりの処理を必要な回数だけくり返す仕組みがあるととても便利です。

そこで登場するのが、繰り返し処理(ループ)です。

Javaには代表的な繰り返し文として、for文、while文、do~while文があります。これらを使えるようになると、長いコードを短く整理できるだけでなく、回数の管理や条件に応じた反復処理も書きやすくなります。プログラムらしい処理の流れを作るために、ループはとても大切な考え方です。

今回の内容では、まずもっとも基本的で使いやすいfor文を中心に、繰り返しのしくみを丁寧に見ていきます。回数を数えながら処理を進める感覚がつかめると、Javaのコードを読む力も書く力もぐっと伸びていきます。

繰り返し処理とは何か

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

日常生活でも、私たちは知らないうちに繰り返しを使っています。たとえば、毎朝の支度、毎週の授業、毎日同じ時刻に行う習慣などは、すべて「同じ流れの反復」と考えることができます。

プログラムでも同じです。たとえば次のような処理は、繰り返しで表現すると自然です。

やりたいこと繰り返しの考え方
メッセージを5回表示する5回同じ表示をくり返す
1から10まで順に処理する数字を1つずつ増やしながら処理する
条件を満たすまで続ける条件が成り立つ間だけ処理を続ける

このように、繰り返し文を使うと、同じようなコードを何行も並べる必要がなくなります。コードが短くなり、見やすくなり、修正もしやすくなります。

for文の基本

まずは、繰り返し処理の代表であるfor文の形を見てみましょう。

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

この書き方には、それぞれ次のような役割があります。

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

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

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

このfor文は、次の流れで動きます。

  1. まず変数iに1を入れる
  2. i <= 5 が成り立つかを調べる
  3. 成り立つならブロックの中の処理を実行する
  4. iを1増やす
  5. もう一度条件を調べる
  6. 条件が成り立たなくなるまで続ける

つまり、iが1、2、3、4、5の間、同じ処理がくり返されるわけです。

for文の流れをイメージしよう

for文は見た目だけだと少し難しそうに見えるかもしれませんが、流れはとても素直です。

手順内容
1カウンタ変数を用意する
2条件を確認する
3条件がtrueなら処理を行う
4変数の値を変える
5再び条件を確認する

この流れは、たとえば「1から5まで順番に作業をする」と考えると理解しやすいです。
「今何回目なのか」を表す数字を持っておき、それを少しずつ増やしながら処理を進めていくイメージです。

サンプルプログラム:for文で同じ処理をくり返す

まずは、同じメッセージを数回表示するシンプルなプログラムを作成します。

ファイル名:Sample1.java

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

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

このプログラムのポイント

このコードでは、変数iを1から4まで変化させながら、同じメッセージを4回表示しています。
最後に、ループの外で終了メッセージを1回だけ表示しています。

実行結果

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

どう動いているのか

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

このように、条件がfalseになった時点で繰り返しは終わります。

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

for文では、回数を管理している変数をループの中で使うことができます。これによって、「今は何回目なのか」「どの番号を処理しているのか」といった情報を表示できます。

これは実用面でもとても大切です。たとえば、連番で表示したり、順番に処理を進めたり、データの番号を扱ったりするときに便利です。

サンプルプログラム:何回目の処理かを表示する

ファイル名: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の値が1ずつ増えていきます。
そのため、同じメッセージでも「1回目」「2回目」「3回目」のように変化をつけることができます。

この考え方はとても重要です。
繰り返し処理は、ただ同じことを何度もするだけではありません。回数に応じて少しずつ変化する処理を書くことができます。

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

for文の中で宣言した変数は、多くの場合「カウンタ変数」として使われます。
この変数には、次のような役割があります。

役割
回数を数える1回目、2回目、3回目
番号を表す1番の商品、2番の商品
値を順番に変える1から10まで増やす
条件の判定材料にする何回くり返したかで終了する

for文を理解するときは、「この変数が今どんな値を持っているか」を意識すると、とてもわかりやすくなります。

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

for文の中で宣言した変数は、そのfor文の中だけで使えるのが基本です。これを変数の有効範囲と考えるとよいでしょう。

たとえば、

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

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

もしループが終わったあとにもiを使いたいなら、先に外で宣言しておきます。

int i;
for(i = 1; i <= 5; i++){
    System.out.println(i + "回目の処理です。");
}
System.out.println((i - 1) + "回くり返しました。");

このようにすると、ループ終了後にもiを利用できます。

なぜ i - 1 になるのか

ループが終わるとき、iは条件を満たさなくなった値まで進んでいます。
たとえば i <= 5 で止まる場合、終了時のiは6です。
そのため、実際の繰り返し回数を表すには i - 1 を使う必要があります。

サンプルプログラム:入力した回数だけ記号を表示する

「●」を表示するプログラムです。

ファイル名: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("●");
        }
    }
}

このプログラムで学べること

この例では、決まった回数ではなく、入力された数だけ繰り返すようになっています。
つまり、for文は固定回数の反復だけでなく、状況に応じた回数の処理にも使えるということです。

実行例

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

しくみを見てみよう

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

このように、入力値がそのまま繰り返し回数になります。

サンプルプログラム:くり返しを使って合計を求める

次は、数をただ表示するだけでなく、繰り返しを利用して計算する例です。
「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から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文を組み合わせると、条件に合うものだけを選んで処理できます。
ループと条件分岐は、とても相性のよい組み合わせです。

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

for文の中では、1文だけでなく複数の文をまとめてくり返すことができます。
そのときに使うのがブロックです。

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

このように書くと、ブロックの中の2つの文がセットでくり返されます。

ブロックを使う意味

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

実際のプログラムでは、繰り返したい処理が複数行になることが多いので、ブロックはとてもよく使います。

いろいろなfor文の書き方

for文は、初期値や条件、増減のしかたを変えることで、さまざまな繰り返しに対応できます。

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

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

これは合計10回くり返されます。

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

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

1から10までの番号をそのまま使いたいときにわかりやすい書き方です。

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

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

カウントダウンや逆順処理でよく使います。

比較表

書き方動き
i = 0; i < 10; i++0~9を扱う
i = 1; i <= 10; i++1~10を扱う
i = 10; i >= 1; i--10~1を扱う

この違いはとても大切です。
特に < と <= の違いで回数が変わるので、最初のうちは丁寧に確認しながら書くのがおすすめです。

for文でよくあるつまずき

for文は便利ですが、初心者のうちは似たようなミスをしやすいです。ここで代表的な注意点を整理しておきましょう。

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

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

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

このコードではiが増えていないため、条件がずっとtrueのままになり、終わらないループになる可能性があります。

この図のポイントは、for文がただ機械的に動いているのではなく、条件を確認しながら1周ずつ進んでいることを見せる点にあります。

特に初心者にとって大事なのは、次の2点です。

  1. 最初に初期化が1回だけ行われること
  2. 処理のたびに変化式が実行され、そのあと再び条件を確認すること

この流れが頭に入ると、for文の動きをかなり正確に追えるようになります。

for文は短くても強力

for文のよいところは、少ないコードでかなり多くのことができる点です。

たとえば、同じ処理を10回書こうとすると、手で10行並べるのは大変ですし、修正も面倒です。ですがfor文なら、条件を少し変えるだけで回数も内容も柔軟に調整できます。

さらに、ループ変数を使えば、

  • 回数の表示
  • 番号付きの処理
  • 合計の計算
  • 条件に合うものだけを処理

といったことも簡単に表現できます。

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

繰り返し処理を学ぶ意味

Javaを学んでいくと、繰り返し文は必ず何度も出てきます。
配列、文字列処理、入力の連続処理、ゲームのロジック、表の出力など、さまざまな場面でループが活躍します。

そのため、今の段階でしっかり理解しておくと、この先の学習がとてもスムーズになります。

まずは次のことを意識して練習するとよいです。

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

for文は最初こそ少し構文が長く感じるかもしれませんが、慣れてしまえばとても頼りになる文です。
「何回くり返すのか」「そのたびに何をするのか」を意識しながらコードを読むと、理解がぐっと深まります。