Java | for文(繰り返し処理)

Java Java
スポンサーリンク

初心者向けにもっと噛み砕いて、たっぷり例題とステップごとの解説を付けます。実際に手を動かして理解できるように、基本から応用(配列・ネスト・break/continue・無限ループ)まで、コードと出力、そして練習問題+解答を順に示します。

for 文のイメージ

for 文は「同じ処理を決まった回数だけ繰り返す」ための道具です。
イメージ:はじめに目印(変数)を置く → 「まだ続ける?」を確認 → 本体を実行 → 目印を進める → また「まだ続ける?」… を繰り返す。

構文:

for (初期化式; 条件式; 変化式) {
    // ここが繰り返す処理(本体)
}
Java
  • 初期化式:最初に1回だけ実行(例:int i = 0
  • 条件式:trueの間ループを続ける(例:i < 5
  • 変化式:1回の繰り返しが終わったあとに実行(例:i++

例1:0から4を順に表示する(もっとも基本)

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

動き(ステップ):

  1. 初期化:i = 0
  2. 条件チェック:0 < 5 → true → 本体実行 → 表示 0
  3. 変化式:i++i = 1
  4. 条件チェック:1 < 5 → true → 表示 1
    … 同様に 2, 3, 4 を表示
    最後:i = 55 < 5 が false → 終了

出力:

0
1
2
3
4

ポイント:i はループごとに変化して、条件を満たす間だけ実行される。


例2:合計を計算する(0〜4 の合計)

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

計算の流れ(手で追うと理解しやすい):

  • 初期:sum = 0
  • i=0 → sum = 0 + 0 = 0
  • i=1 → sum = 0 + 1 = 1
  • i=2 → sum = 1 + 2 = 3
  • i=3 → sum = 3 + 3 = 6
  • i=4 → sum = 6 + 4 = 10
    出力:10

例3:配列(またはリスト)の要素を順に処理する

String[] names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.length; i++) {
    System.out.println("index " + i + ": " + names[i]);
}
Java

出力:

index 0: Alice
index 1: Bob
index 2: Charlie

ポイント:配列の長さは names.length で得られるので、i < names.length を条件にするのが安全。


例4:ネスト(入れ子)for — 表を作る

for (int r = 1; r <= 3; r++) {
    for (int c = 1; c <= 3; c++) {
        System.out.print(r * c + "\t"); // 同じ行に表示
    }
    System.out.println(); // 改行
}
Java

出力(3×3 の掛け算表):

1	2	3
2	4	6
3	6	9

ポイント:外側ループ1回につき内側ループは最初から最後まで回る → 総実行回数は掛け算的に増える(3×3 = 9回)。


例5:break と continue

  • break; → ループを完全に抜ける
  • continue; → 今回の繰り返しをスキップして、次の繰り返しへ
for (int i = 0; i < 10; i++) {
    if (i == 5) break;      // i が 5 になったらループ終了
    if (i % 2 == 0) continue; // 偶数のときは下をスキップ(次へ)
    System.out.println(i); // 奇数だけ出力
}
Java

ここでは 1, 3 が出力され、その後 i==5break する(したがって 5 より後は実行されない)。


例6:無限ループの作り方(注意!)

for (;;) {
    // 条件式を省略すると常に true とみなされる → 無限ループ
    // 必要なら中で break; で抜ける
}
Java

実務では for(;;) より while(true) のほうが読みやすいことが多いです。無限ループは必ず抜ける条件や break を用意しましょう。


初心者がやりがちなミス(チェックリスト)

  • 条件がいつまでも true → 無限ループになる(変化式を書き忘れた等)
  • ループ変数のスコープを誤解(for 内で宣言した i は for の外で使えない)
  • 配列アクセスで範囲外を参照(i <= array.length としてしまい、最後で ArrayIndexOutOfBoundsException
    → 正しくは i < array.length
  • ネストで指数的に実行回数が増えて遅くなる(大きいデータでは注意)

練習問題

下に 4 問。解答と解説は続けて付けます。まずは自分で考えてから答えを見てね。

問題1
0 から 9 までの数字を一行ずつ表示する for を書け。

問題2
1 から 10 までの合計を for で計算して出力せよ。

問題3
整数配列 int[] a = {3, 7, 2, 9} の最大値を for で見つけて表示せよ。

問題4(少し応用)
* を使って、次のようなピラミッド(3段)を for で出力せよ(結果は下のとおり):

*
**
***

解答とステップごとの解説

解答1

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

解説:i を 0 から始めて i < 10 の間繰り返すので 09 が表示されます。


解答2

int sum = 0;
for (int i = 1; i <= 10; i++) {
    sum += i;
}
System.out.println(sum);
Java

ステップで追うと:
1 + 2 + 3 + … + 10 を順に加算
途中の合計(省略せずに書くと):

  • i=1 → sum=1
  • i=2 → sum=3
  • i=3 → sum=6
  • i=4 → sum=10
  • i=5 → sum=15
  • i=6 → sum=21
  • i=7 → sum=28
  • i=8 → sum=36
  • i=9 → sum=45
  • i=10 → sum=55
    出力:55

(メモ:公式なら n(n+1)/2 = 10×11/2 = 55)


解答3

int[] a = {3, 7, 2, 9};
int max = a[0]; // 最初を仮の最大値にする
for (int i = 1; i < a.length; i++) {
    if (a[i] > max) {
        max = a[i];
    }
}
System.out.println(max); // 9
Java

解説(ステップ):

  • 初期:max = 3
  • i=1 → a[1]=7 → 7 > 3 ? yes → max=7
  • i=2 → a[2]=2 → 2 > 7 ? no → max stays 7
  • i=3 → a[3]=9 → 9 > 7 ? yes → max=9
    出力:9

解答4

int n = 3; // 段数
for (int i = 1; i <= n; i++) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
}
Java

解説:

  • 外側 i が 1 のとき、内側ループ j=0..<1* を1つ出力 → 改行
  • i=2 のとき、内側で * を2つ出力 → 改行
  • i=3 のとき、* を3つ出力 → 改行

出力:

*
**
***

さらに練習したい人向け(応用のヒント)

  • 配列の全要素を合計して平均を出すプログラムを作る(配列長に注意)
  • 2次元配列(行列)を for のネストで処理して、行ごとの合計を出す
  • break を使って条件付きで早めにループを抜ける例を作る(見つけたら検索を止める等)
  • continue を使って特定の要素だけをスキップする(負の数を無視して正の数だけ合計する等)
タイトルとURLをコピーしました