この記事では、while文、do-while文について詳しく解説します。各構文の基本的な使い方から応用例まで、初心者にも分かりやすく説明し、これらの制御構造の違いと適切な使用場面を理解できるようになります。
はじめに
この記事のコードをコピペしてEclipseで出力結果を確認してみよう!
while文
while文は、指定された条件が真である限り、処理を繰り返し実行する制御構造です。
基本構文
while (条件式) {
// 繰り返し実行する処理
}
動作の流れ
- まず条件式が評価されます。
- 条件式がtrueの場合、ブロック内の処理が実行されます。
- ブロック内の処理が終わると、再び条件式の評価に戻ります。
- 条件式がfalseになるまで、2と3を繰り返します。
重要なポイント
- 初期化: while文の外で、ループ制御変数を初期化する必要があります。
- 条件更新: ループ内で条件を変更する処理を含めないと、無限ループになる可能性があります。
- 最小実行回数: while文は条件式を最初に評価するため、条件が最初からfalseの場合、一度も実行されない可能性があります。
- 使用場面: while文は繰り返し回数が不明確な場合や、条件に基づいて繰り返す場合に適しています。
制御文
while文内では以下の制御文を使用できます:
- break: ループを即座に終了します。
- continue: 現在の繰り返しをスキップし、次の繰り返しに進みます。
while文:プログラム例
現在の数字を表示するシンプルなwhile文
// 変数の初期化
int number = 1; // 数えるための変数を1で初期化します
// while文の開始
// numberが5以下の間、ループが続きます
while (number <= 5) {
// 現在のnumberの値を表示します
System.out.println("現在の数字: " + number);
// numberを1増やします
// これがないと、ループが永遠に続いてしまいます(無限ループ)
number++; //number++;はnumber = number + 1と同義です。
// ここでループの1周が終わり、条件チェック(number <= 5)に戻ります
}
// ループが終了したことを表示します
System.out.println("カウントが終わりました");
出力結果:
現在の数字: 1
現在の数字: 2
現在の数字: 3
現在の数字: 4
現在の数字: 5
カウントが終わりました
このコードの解説:
変数の初期化
int number = 1; // 数えるための変数を1で初期化します
number
変数を1で初期化します。これはループのカウンターとして使用されます。
whileループの開始
while (number <= 5) {
while
ループを開始します。number
が5以下である限り、ループが続きます。これがループの継続条件です。
現在の数字の表示
System.out.println("現在の数字: " + number);
- 現在の
number
の値を表示します。 - これにより、ループの各反復で現在のカウントを確認できます。
カウンターの増加
number++; //number++;はnumber = number + 1と同義です。
number
を1増やします。- これはループの終了条件に向けて進むための重要なステップです。
number++
はnumber = number + 1
の省略形です。
ループの終了
- ループの終わりに達すると、プログラムは再び条件(
number <= 5
)をチェックします。 - 条件が真の場合、ループが続きます。偽になると、ループを抜けます。
ループ終了後の処理
System.out.println("カウントが終わりました");
- ループが終了した後、このメッセージが表示されます。
重要なポイント
- 初期化: ループ変数(この場合は
number
)を適切に初期化することが重要です。 - 条件: ループの継続条件(
number <= 5
)は、ループが終了すべき時点を正確に定義します。 - 増分:
number++
はループが無限に続くのを防ぐ重要な役割を果たします。これがないと無限ループに陥る危険性があります。 - ループの本体: ループ内で実行したい処理(この場合は数字の表示)を記述します。
このシンプルな例は、while文の基本的な構造と動作を理解するのに役立ちます。初心者の方は、このコードを実行して、各ステップでどのように値が変化していくかを観察してみてください。また、条件(number <= 5
の部分)を変更して、異なる回数ループするように試してみるのも良い学習方法です。
while文:プログラム例(応用)
break,continueを使用したwhile文
// 変数の初期化
int count = 1; // カウンターを1から始める
// while文の開始
// countが10以下の間、ループが続く
while (count <= 10) {
// 現在のcountの値を表示
System.out.println("現在の数: " + count);
// もしcountが7なら、ループを即座に終了する
if (count == 7) {
System.out.println("7で終了します");
break; // ここでループを抜ける
}
// もしcountが偶数なら、次のループに進む
if (count % 2 == 0) {
System.out.println(count + "は偶数なのでスキップします");
count++; // countを増やす
continue; // ここで次のループの先頭に戻る
}
// 奇数の場合の処理
System.out.println(count + "は奇数です");
// countを1増やす
count++;
// ここでループの1周が終わり、条件チェックに戻る
}
// ループが終了した後の処理
System.out.println("ループが終了しました");
System.out.println("最後のカウント: " + count);
出力結果:
現在の数: 1
1は奇数です
現在の数: 2
2は偶数なのでスキップします
現在の数: 3
3は奇数です
現在の数: 4
4は偶数なのでスキップします
現在の数: 5
5は奇数です
現在の数: 6
6は偶数なのでスキップします
現在の数: 7
7で終了します
ループが終了しました
最後のカウント: 7
コード解説:
変数の初期化
int count = 1; // カウンターを1から始める
count
変数を1で初期化します。これはループのカウンターとして使用されます。
whileループの開始
while (count <= 10) {
while
ループを開始します。count
が10以下である限り、ループが続きます。
カウントの表示
System.out.println("現在の数: " + count);
- 現在の
count
の値を表示します。
breakの使用
if (count == 7) {
System.out.println("7で終了します");
break; // ここでループを抜ける
}
count
が7の場合、メッセージを表示し、break
文を使用してループを即座に終了します。
continueの使用
if (count % 2 == 0) {
System.out.println(count + "は偶数なのでスキップします");
count++; // countを増やす
continue; // ここで次のループの先頭に戻る
}
count
が偶数の場合(2で割り切れる場合)、メッセージを表示し、count
を増やしてからcontinue
文を使用して次のループの先頭に戻ります。
奇数の処理
System.out.println(count + "は奇数です");
count
が奇数の場合、このメッセージが表示されます。
カウンターの増加
count++;
- ループの最後で
count
を1増やします。
ループ終了後の処理
System.out.println("ループが終了しました");
System.out.println("最後のカウント: " + count);
- ループが終了した後、これらのメッセージが表示されます。
- 最後の
count
の値も表示されます。
このコードを実行すると、1から始まり、偶数をスキップし、7に達したら終了します。初心者の方は、このコードを実行して、break
とcontinue
がどのようにループの流れを制御しているかを観察してください。また、条件を変更して、異なる動作を試してみるのも良い学習方法です。
do-while文
do-while文は、繰り返し構造の一つで、少なくとも1回は処理を実行してから条件をチェックする特徴があります。
基本構文
do {
// 繰り返し実行する処理
} while (条件式);
重要: 条件式の後にセミコロン(;)が必要です。
do-while文:プログラム例
1から5までの数を表示するプログラム
int count = 1;
do {
System.out.println("数字: " + count);
count++;
} while (count <= 5);
出力結果:
数字: 1
数字: 2
数字: 3
数字: 4
数字: 5
この例では:
- 最初に
count
が1で初期化されます。 - doブロック内の処理が最低1回は実行されます。
- 条件
count <= 5
がtrueの間、ループが続きます。
do-while文:プログラム例(応用)
ユーザー入力を受け取り、正の数が入力されるまでループを続けるプログラム
import java.util.Scanner; // ユーザー入力を受け取るためのScannerクラスをインポート
public class DoWhileExample {
public static void main(String[] args) {
// Scannerオブジェクトを作成し、標準入力(キーボード)からの入力を受け付ける
Scanner scanner = new Scanner(System.in);
int number; // ユーザーが入力する数字を格納する変数
// do-whileループの開始
do {
// ユーザーに入力を促すメッセージを表示
System.out.print("正の数を入力してください: ");
// ユーザーの入力を読み取り、number変数に格納
number = scanner.nextInt();
// 入力された数が0以下の場合、エラーメッセージを表示
if (number <= 0) {
System.out.println("エラー: 正の数ではありません。");
}
} while (number <= 0); // numberが0以下の場合、ループを続ける
// 正の数が入力されたら、その数を表示
System.out.println("入力された正の数: " + number);
// Scannerオブジェクトを閉じる(リソースの解放)
scanner.close();
}
}
出力結果:
正の数を入力してください: -3
エラー: 正の数ではありません。
正の数を入力してください: -6
エラー: 正の数ではありません。
正の数を入力してください: 2
入力された正の数: 2
コードの解説:
インポートと クラス定義
import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
java.util.Scanner
クラスをインポートします。これはユーザー入力を受け取るために必要です。DoWhileExample
という名前のpublicクラスを定義します。main
メソッドを定義し、プログラムのエントリーポイントを作成します。
変数の初期化
Scanner scanner = new Scanner(System.in);
int number;
Scanner
オブジェクトを作成し、標準入力(キーボード)からの入力を受け付けるように設定します。number
変数を宣言し、ユーザーが入力する数字を格納するために使用します。
do-whileループ
do {
System.out.print("正の数を入力してください: ");
number = scanner.nextInt();
if (number <= 0) {
System.out.println("エラー: 正の数ではありません。");
}
} while (number <= 0);
- do-whileループを使用して、ユーザーが正の数を入力するまで繰り返します。
- ユーザーに入力を促すメッセージを表示します。
scanner.nextInt()
を使用してユーザーの入力を読み取り、number
変数に格納します。- 入力が0以下の場合、エラーメッセージを表示します。
- ループの条件
(number <= 0)
が真である限り、ループは継続します。
結果の表示とリソースの解放
System.out.println("入力された正の数: " + number);
scanner.close();
- 正の数が入力されたら、その数を表示します。
scanner.close()
を呼び出してScannerオブジェクトを閉じ、リソースを解放します。
重要なポイント
- do-while文は、条件チェックが後に来るため、最低1回は実行されることが保証されています。
- while文との主な違いは、do-while文は必ず1回は実行される点です。
- 無限ループを避けるため、ループ内で条件を変更する処理を含めることが重要です。
- do-while文は、ユーザー入力の検証や、特定の条件が満たされるまで処理を繰り返す場合に特に有用です。
まとめ
- while文は、条件が真である間繰り返し処理を行い、繰り返し回数が不明確な場合に適しています。
- do-while文は、最低1回は処理を実行してから条件をチェックするため、初回の実行が必須な場合に有用です。
- 各ループ構造の適切な使用場面を理解することで、より効率的で読みやすいコードを書くことができます。
これらの構造を適切に使い分け、組み合わせることで、様々な問題に対応できる柔軟なプログラムを作成することができます。繰り返し構造の理解と適切な使用は、プログラミングスキルの向上に大きく貢献し、より効率的で保守性の高いコードを書く能力を養うことができます。
コメント