Java – while文内でcontinue文を使ったときの挙動について解説
Javaのwhile
文内でcontinue
文を使用すると、continue
が実行された時点でその反復処理の残りのコードがスキップされ、次の反復処理に進みます。
while
文の条件式が再評価され、条件がtrue
であればループが継続します。
例えば、特定の条件を満たす場合に処理を飛ばしたい場合に有効です。
ただし、無限ループに注意が必要です。
while文内でcontinue文を使う際の挙動
Javaにおけるwhile
文は、条件が真である限り繰り返し処理を行います。
一方、continue
文は、ループの現在の反復を終了し、次の反復に移行するために使用されます。
これにより、特定の条件を満たす場合にのみ処理をスキップすることができます。
continue文の基本的な挙動
continue
文がwhile
文内で使用されると、以下のような挙動になります。
while
文の条件が真である限り、ループが実行される。- ループ内で
continue
文が実行されると、以降の処理はスキップされ、次の反復が開始される。 - ループの条件が再評価され、真であれば再びループが実行される。
この挙動を理解するために、具体的なサンプルコードを見てみましょう。
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
文を取り入れ、より効率的なコードを書くことに挑戦してみてください。