繰り返し処理

Java – while文内でcontinue文を使ったときの挙動について解説

Javaのwhile文内でcontinue文を使用すると、continueが実行された時点でその反復処理の残りのコードがスキップされ、次の反復処理に進みます。

while文の条件式が再評価され、条件がtrueであればループが継続します。

例えば、特定の条件を満たす場合に処理を飛ばしたい場合に有効です。

ただし、無限ループに注意が必要です。

while文内でcontinue文を使う際の挙動

Javaにおけるwhile文は、条件が真である限り繰り返し処理を行います。

一方、continue文は、ループの現在の反復を終了し、次の反復に移行するために使用されます。

これにより、特定の条件を満たす場合にのみ処理をスキップすることができます。

continue文の基本的な挙動

continue文がwhile文内で使用されると、以下のような挙動になります。

  1. while文の条件が真である限り、ループが実行される。
  2. ループ内でcontinue文が実行されると、以降の処理はスキップされ、次の反復が開始される。
  3. ループの条件が再評価され、真であれば再びループが実行される。

この挙動を理解するために、具体的なサンプルコードを見てみましょう。

public class App {
    public static void main(String[] args) {
        int i = 0; // ループカウンタの初期化
        while (i < 10) { // ループ条件
            i++; // カウンタをインクリメント
            if (i % 2 == 0) { // 偶数の場合
                continue; // 偶数のときは次の反復へ
            }
            System.out.println(i); // 奇数を出力
        }
    }
}
1
3
5
7
9

このコードでは、iが0から9までの値を取りますが、偶数のときはcontinue文によって出力がスキップされます。

そのため、出力結果には奇数のみが表示されます。

continue文を使うことで、特定の条件に基づいて処理を柔軟に制御することが可能です。

while文内でcontinue文を使う具体例

while文内でcontinue文を使用する具体的な例をいくつか紹介します。

これにより、continue文の使い方やその効果をより深く理解することができます。

例1: 偶数をスキップする

最初の例では、1から10までの数値の中で偶数をスキップし、奇数のみを出力するプログラムを示します。

public class App {
    public static void main(String[] args) {
        int i = 1; // ループカウンタの初期化
        while (i <= 10) { // ループ条件
            if (i % 2 == 0) { // 偶数の場合
                i++; // カウンタをインクリメント
                continue; // 偶数のときは次の反復へ
            }
            System.out.println(i); // 奇数を出力
            i++; // カウンタをインクリメント
        }
    }
}
1
3
5
7
9

このプログラムでは、iが偶数のときにcontinue文が実行され、次の反復に移行します。

これにより、奇数のみが出力されます。

例2: 特定の条件を満たす値をスキップする

次の例では、1から20までの数値の中で、5の倍数をスキップして出力するプログラムを示します。

public class App {
    public static void main(String[] args) {
        int i = 1; // ループカウンタの初期化
        while (i <= 20) { // ループ条件
            if (i % 5 == 0) { // 5の倍数の場合
                i++; // カウンタをインクリメント
                continue; // 5の倍数のときは次の反復へ
            }
            System.out.println(i); // 5の倍数以外を出力
            i++; // カウンタをインクリメント
        }
    }
}
1
2
3
4
6
7
8
9
11
12
13
14
16
17
18
19

このプログラムでは、iが5の倍数のときにcontinue文が実行され、出力がスキップされます。

これにより、5の倍数以外の数値が出力されます。

例3: 入力値のフィルタリング

最後の例では、ユーザーからの入力を受け取り、負の数をスキップして出力するプログラムを示します。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerの初期化
        int i = 0; // ループカウンタの初期化
        while (i < 5) { // 5回の入力を受け取る
            System.out.print("数値を入力してください: ");
            int input = scanner.nextInt(); // ユーザーからの入力を取得
            if (input < 0) { // 負の数の場合
                continue; // 負の数のときは次の反復へ
            }
            System.out.println("入力された数値: " + input); // 正の数を出力
            i++; // カウンタをインクリメント
        }
        scanner.close(); // Scannerを閉じる
    }
}
数値を入力してください: 3
入力された数値: 3
数値を入力してください: -1
数値を入力してください: 5
入力された数値: 5
数値を入力してください: 0
入力された数値: 0
数値を入力してください: -2
数値を入力してください: 7
入力された数値: 7

このプログラムでは、ユーザーが入力した数値が負の数の場合、continue文によって出力がスキップされます。

正の数のみが出力され、5回の入力が完了するまでループが続きます。

これらの具体例を通じて、while文内でのcontinue文の使い方とその効果を理解することができます。

while文とcontinue文を使う際の注意点

while文とcontinue文を使用する際には、いくつかの注意点があります。

これらを理解しておくことで、意図しない動作を避け、より効果的にプログラムを構築することができます。

以下に主な注意点を示します。

無限ループに注意

continue文を使用する際、ループの条件が常に真である場合、無限ループに陥る可能性があります。

特に、continue文の前にカウンタのインクリメントや条件の変更が行われていないと、ループが終了しないことがあります。

注意点説明
カウンタの更新continue文の前にカウンタを更新することが重要
条件の見直しループ条件が適切に変更されているか確認すること

条件の順序

continue文を使用する際、条件の順序が重要です。

特定の条件を最初にチェックしないと、意図しない動作を引き起こすことがあります。

例えば、continue文の条件が他の条件よりも先に評価されると、必要な処理がスキップされることがあります。

注意点説明
条件の優先順位条件の順序を適切に設定することが重要
複数条件の組み合わせ複数の条件を組み合わせる際は注意が必要

可読性の確保

continue文を多用すると、コードの可読性が低下することがあります。

特に、複雑な条件やネストされたループ内で使用する場合、コードの流れが分かりにくくなることがあります。

可読性を保つためには、以下の点に注意しましょう。

注意点説明
コメントの活用コードの意図を明確にするためにコメントを追加する
シンプルな条件条件をシンプルに保ち、複雑なロジックを避ける

例外処理との併用

continue文を使用する際、例外処理との併用に注意が必要です。

例外が発生した場合、continue文が実行されず、ループが終了することがあります。

例外処理を適切に行うことで、意図しない動作を防ぐことができます。

注意点説明
例外処理の実装例外が発生した場合の処理を明確にすること
ループの状態確認例外発生時のループの状態を確認すること

これらの注意点を考慮することで、while文とcontinue文を効果的に使用し、意図した通りの動作を実現することができます。

プログラムの設計段階でこれらの点を意識することが重要です。

実践的な活用例

while文とcontinue文は、さまざまな場面で活用できます。

ここでは、実践的なシナリオをいくつか紹介し、どのようにこれらの文を効果的に使用できるかを示します。

例1: ユーザー入力のフィルタリング

ユーザーからの入力を受け取り、特定の条件を満たさない値をスキップするプログラムです。

この例では、負の数をスキップし、正の数のみを合計します。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerの初期化
        int sum = 0; // 合計値の初期化
        int count = 0; // 入力回数のカウンタ
        while (count < 5) { // 5回の入力を受け取る
            System.out.print("正の数を入力してください: ");
            int input = scanner.nextInt(); // ユーザーからの入力を取得
            if (input < 0) { // 負の数の場合
                System.out.println("負の数はスキップされました。");
                continue; // 負の数のときは次の反復へ
            }
            sum += input; // 正の数を合計に加算
            count++; // カウンタをインクリメント
        }
        System.out.println("合計: " + sum); // 合計を出力
        scanner.close(); // Scannerを閉じる
    }
}
正の数を入力してください: 3
正の数を入力してください: -1
負の数はスキップされました。
正の数を入力してください: 5
正の数を入力してください: 0
正の数を入力してください: 7
合計: 15

このプログラムでは、ユーザーが5回の入力を行い、負の数はスキップされます。

合計は正の数のみで計算され、最終的に出力されます。

例2: 配列のフィルタリング

次の例では、整数の配列から特定の条件を満たす要素をスキップし、残りの要素を出力するプログラムです。

この例では、配列内の偶数をスキップします。

public class App {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 整数の配列
        int i = 0; // ループカウンタの初期化
        while (i < numbers.length) { // 配列の長さまでループ
            if (numbers[i] % 2 == 0) { // 偶数の場合
                i++; // カウンタをインクリメント
                continue; // 偶数のときは次の反復へ
            }
            System.out.println(numbers[i]); // 奇数を出力
            i++; // カウンタをインクリメント
        }
    }
}
1
3
5
7
9

このプログラムでは、配列内の偶数がスキップされ、奇数のみが出力されます。

continue文を使用することで、特定の条件に基づいて出力を制御しています。

例3: ゲームのスコア計算

最後の例では、ゲームのスコアを計算するプログラムを示します。

特定の条件を満たさないスコアをスキップし、最終的なスコアを計算します。

import java.util.Random; // Randomクラスをインポート
public class App {
    public static void main(String[] args) {
        Random random = new Random(); // Randomの初期化
        int totalScore = 0; // 総スコアの初期化
        int rounds = 10; // ラウンド数
        int i = 0; // ループカウンタの初期化
        while (i < rounds) { // 指定されたラウンド数までループ
            int score = random.nextInt(20); // 0から19のランダムなスコアを生成
            if (score < 5) { // スコアが5未満の場合
                System.out.println("スコア " + score + " はスキップされました。");
                i++; // カウンタをインクリメント
                continue; // スコアが5未満のときは次の反復へ
            }
            totalScore += score; // スコアを合計に加算
            System.out.println("スコア: " + score); // スコアを出力
            i++; // カウンタをインクリメント
        }
        System.out.println("最終スコア: " + totalScore); // 最終スコアを出力
    }
}
スコア 2 はスキップされました。
スコア: 10
スコア: 8
スコア 3 はスキップされました。
スコア: 15
最終スコア: 33

このプログラムでは、ランダムに生成されたスコアが5未満の場合にスキップされ、最終的なスコアが計算されます。

continue文を使用することで、特定の条件に基づいてスコアの計算を制御しています。

これらの実践的な活用例を通じて、while文とcontinue文の効果的な使用方法を理解し、さまざまなシナリオでの応用が可能になります。

まとめ

この記事では、Javaにおけるwhile文とcontinue文の使い方について詳しく解説しました。

特に、while文内でのcontinue文の挙動や具体的な活用例を通じて、プログラムの制御フローを柔軟に扱う方法を紹介しました。

これを機に、実際のプログラムにwhile文とcontinue文を取り入れ、より効率的なコードを書くことに挑戦してみてください。

関連記事

Back to top button