ループ

ループにより、プログラムは特定の操作を繰り返すことができます。このレッスンでは、Javaのループ構造を学びます。

forループ

forループは最も一般的に使用されるループ構造で、反復回数が既知の場合に最適です。

構文

JAVA
for (初期化; 条件; 更新) {
    // ループ本体
}

例:1から10まで表示

JAVA
public class ForDemo {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
    }
}
▶ 試してみよう

実行フロー

TEXT
1. 初期化を実行(int i = 1)
2. 条件をチェック(i <= 10)
3. 条件がtrueの場合、ループ本体を実行
4. 更新を実行(i++)
5. ステップ2に戻る

例:1から100までの合計

JAVA
public class SumDemo {
    public static void main(String[] args) {
        int sum = 0;
        
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        
        System.out.println("1から100までの合計: " + sum);  // 5050
    }
}
▶ 試してみよう

whileループ

whileループは反復回数が不明な場合に最適です。

構文

JAVA
while (条件) {
    // ループ本体
}

例:数当てゲーム

JAVA
import java.util.Scanner;
import java.util.Random;

public class GuessGame {
    public static void main(String[] args) {
        Random random = new Random();
        int target = random.nextInt(100) + 1;
        Scanner scanner = new Scanner(System.in);
        int guess = 0;
        
        System.out.println("数当てゲーム(1-100)");
        
        while (guess != target) {
            System.out.print("推測を入力: ");
            guess = scanner.nextInt();
            
            if (guess > target) {
                System.out.println("大きすぎます!");
            } else if (guess < target) {
                System.out.println("小さすぎます!");
            } else {
                System.out.println("おめでとうございます!正解です!");
            }
        }
        
        scanner.close();
    }
}
▶ 試してみよう

do-whileループ

do-whileループは少なくとも1回ループ本体を実行します。

構文

JAVA
do {
    // ループ本体
} while (条件);

例:メニューループ

JAVA
import java.util.Scanner;

public class MenuDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int choice;
        
        do {
            System.out.println("\n=== メインメニュー ===");
            System.out.println("1. ゲーム開始");
            System.out.println("2. 設定");
            System.out.println("3. 終了");
            System.out.print("選択してください: ");
            choice = scanner.nextInt();
            
            switch (choice) {
                case 1:
                    System.out.println("ゲーム開始...");
                    break;
                case 2:
                    System.out.println("設定を開く...");
                    break;
                case 3:
                    System.out.println("さようなら!");
                    break;
                default:
                    System.out.println("無効な選択");
            }
        } while (choice != 3);
        
        scanner.close();
    }
}
▶ 試してみよう
💡 while vs do-while: whileは条件を先にチェックし、実行されない場合があります。do-whileは先に実行してからチェックするため、少なくとも1回の実行が保証されます。

for-eachループ

for-eachループは配列やコレクションを反復処理するために使用されます。

構文

JAVA
for (型 変数 : 配列またはコレクション) {
    // 変数を使用
}

例:配列の反復

JAVA
public class ForEachDemo {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        // 通常のforループ
        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
        
        // for-eachループ
        for (int num : numbers) {
            System.out.println(num);
        }
    }
}
▶ 試してみよう
💡 使用タイミング: 要素のみが必要な場合はfor-eachを使用し、インデックスが必要な場合は通常のforを使用します。

breakとcontinue

break:ループを終了

JAVA
public class BreakDemo {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;  // iが5の場合にループを終了
            }
            System.out.println(i);
        }
        // 出力: 1 2 3 4
    }
}

continue:現在の反復をスキップ

JAVA
public class ContinueDemo {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 == 0) {
                continue;  // 偶数をスキップ
            }
            System.out.println(i);
        }
        // 出力: 1 3 5 7 9
    }
}

ネストされたループ

ループは互いにネストすることができます。

例:九九の表

JAVA
public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + " × " + i + " = " + (i * j) + "\t");
            }
            System.out.println();
        }
    }
}
▶ 試してみよう

出力:

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

例:三角形を表示

JAVA
public class TriangleDemo {
    public static void main(String[] args) {
        int rows = 5;
        
        for (int i = 1; i <= rows; i++) {
            // スペースを表示
            for (int j = 1; j <= rows - i; j++) {
                System.out.print(" ");
            }
            // アスタリスクを表示
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
▶ 試してみよう

出力:

TEXT
    *
   ***
  *
 ***
*****

無限ループ

ループ条件が常にtrueの場合、無限ループが作成されます。

JAVA
// 無限ループの例(これはやらないでください)
while (true) {
    System.out.println("無限ループ");
}

// 正しい無限ループ(終了条件付き)
while (true) {
    // ユーザー入力を読み取る
    String input = scanner.nextLine();
    if (input.equals("exit")) {
        break;  // ユーザーが「exit」と入力したら終了
    }
}

❓ よくある質問

Q forとwhileのどちらを選ぶべきですか?
A 反復回数が既知の場合はforを使用し、不明な場合はwhileを使用します。forはより簡潔で、whileはより柔軟です。
Q breakとreturnの違いは何ですか?
A breakは現在のループを終了し、returnはメソッド全体を終了します。
Q 複数のネストされたループを終了するにはどうすればいいですか?
A ラベル付きbreakを使用します。outer: for(...) { for(...) { break outer; } }

📖 まとめ

📝 演習

  1. 合計: 1から100までのすべての奇数の合計を計算
  2. 階乗: 10の階乗を計算(10! = 10 × 9 × ... × 1)
  3. 九九の表: ネストされたループを使用して完全な九九の表を表示

次のレッスン

次のレッスンでは、配列を学びます — データのグループを保存して操作する方法を学びます。

100%