🎃

Java Silver 強化③ 繰り返し分と制御分

に公開

繰り返し処理(ループ)

1. for 文(基本構文)

構文:

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

特徴:

  • ループ回数が決まっている場合に適している。
  • 初期化 → 条件判定 → 処理実行 → 更新 の順番で実行。

例: 1〜5 を出力

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

2. while 文(条件付きループ)

構文:

while (条件式) {
    // 繰り返し処理
}

特徴:

  • 条件が true の間 繰り返す。
  • ループ回数が決まっていない場合 に適している。

例: 5 から 1 までカウントダウン

int i = 5;
while (i > 0) {
    System.out.println(i); // 5 4 3 2 1
    i--;
}

3. do-while 文(最低 1 回は実行されるループ)

構文:

do {
    // 繰り返し処理
} while (条件式);

特徴:

  • 最低 1 回は必ず実行される。
  • ループの条件が最後にチェックされるため、1回目の処理は無条件に行われる。

例: 0 以上の数値を入力するまでループ

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num;
        do {
            System.out.print("0以上の数を入力してください: ");
            num = scanner.nextInt();
        } while (num < 0);
        System.out.println("入力された数: " + num);
    }
}

4. for-each 文(拡張 for 文)

構文:

for (データ型 変数名 : 配列またはコレクション) {
    // 繰り返し処理
}

特徴:

  • 配列やリストの 要素を順番に処理するのに適している
  • インデックス指定が不要 なので簡潔に書ける。

例: 配列の要素を順番に出力

int[] numbers = {10, 20, 30, 40, 50};
for (int num : numbers) {
    System.out.println(num);
}

実行結果

10
20
30
40
50

5. breakcontinue

break: ループの強制終了

ループ内で break が実行されると、即座にループを終了 する。

例: 3 を見つけたらループ終了

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

実行結果

1
2

i == 3 の時に break でループ終了。

continue: 次のループへスキップ

continue が実行されると、その回の処理をスキップして次のループへ進む

例: 3 のときだけスキップ

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

実行結果

1
2
4
5

i == 3 の時は continueSystem.out.println(i); をスキップ。

6. ラベルとcontinue / ラベルと break

continue とラベルの使い方

continue はループの 現在の繰り返し処理をスキップ し、次のループへ進むために使う。
通常 continue一番内側のループに対して適用 されるが、ラベルを使うと特定のループをスキップ できる。

**例:continue VS ラベル **

public class Main {
    public static void main(String[] args) {
        System.out.println("continue");
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == 2) continue; // jが2の時だけスキップ
                System.out.println("i=" + i + ", j=" + j);
            }
        }

        System.out.println("\n continue");
        outer: // ラベル
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == 2) continue outer; // jが2だったらラベルがついてるところへ移動
                System.out.println("i=" + i + ", j=" + j);
            }
        }
    }
}

実行結果

continue
i=1, j=1
i=1, j=3
i=2, j=1
i=2, j=3
i=3, j=1
i=3, j=3

continue
i=1, j=1
i=2, j=1
i=3, j=1

ポイント

  • continue : 次の繰り返しへ進む(一番内側のループに適用)
  • continue ラベル : 指定したループの次の繰り返しへ進む

break とラベルの使い方

break はループを 途中で終了 させるために使う。
通常 break一番内側のループだけを終了 するが、ラベルを使うことで特定の外側のループ全体を終了 させることができる。


例: break VS ラベル付き break

public class Main {
    public static void main(String[] args) {
        System.out.println("break");
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == 2) break; // jが2になったら内側のループを終了
                System.out.println("i=" + i + ", j=" + j);
            }
        }

        System.out.println("\nbreak with label");
        outer: // ラベル
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == 2) break outer; // jが2になったらouterループ全体を終了
                System.out.println("i=" + i + ", j=" + j);
            }
        }
    }
}

実行結果

break
i=1, j=1
i=2, j=1
i=3, j=1

break with label
i=1, j=1

ポイント

  • break;:一番内側のループを途中で終了
  • break ラベル; : ラベルがついている外側のループ全体を終了
  • ❌ ラベルへ戻らない : gotoではないのでラベルに「戻る」動きではない

7. ループのネスト(入れ子)

ループの中にループを入れることも可能。

例: 九九の表を出力

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	
...
9	18	27	36	45	54	63	72	81	

まとめ

文法 特徴
for ループ回数が決まっている時に使う
while 条件を満たす限り実行(回数未定)
do-while 必ず 1 回は実行される
for-each 配列やコレクションの要素を順番に処理
break ループを強制終了
continue その回の処理をスキップ
ラベル 指定したループの次の繰り返しへ進む

Test Tip

if, for, while, do whileなど{}省略可能
ただ、1行だけ!

if

int i = 2;
System.out.println("スタート");

if(i > 3)
    System.out.println("iは3より大きいです");

System.out.println("終了");

出力

スタート
終了

for

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

while

int i = 0;
while (i < 3)
    System.out.println(i++);  

do-while

int i = 0;
do
    System.out.println(i++); 
while (i < 3);

Discussion