Java の do-while 文とは?最低1回は実行するループ
新人
「Java でループ処理をするときに、最低 1 回は実行されるループがあると聞いたのですが、それは何ですか?」
先輩
「それは do-while 文 のことだね。通常の while 文とは少し違うんだ。」
新人
「while 文とどう違うんですか?」
先輩
「while 文は条件を最初にチェックするけど、do-while 文はまず 1 回実行してから条件を確認するんだよ。詳しく説明していくね!」
1. do-while 文とは?(基本的な説明)
Java の do-while 文 は、通常の while 文と似ていますが、最低 1 回は必ず実行されるのが特徴です。
do-while 文の特徴
- 条件をチェックする前に、必ず 1 回処理を実行する
- 繰り返し処理を行うが、条件が
falseの場合は 1 回のみで終了する - ユーザー入力のように「まず処理を実行し、後から継続を決める」場合に便利
例えば、1 回は必ず実行し、条件に応じて継続するプログラムを作ることができます。
2. do-while 文の基本的な書き方
do-while 文は、通常の while 文とは異なり、最初に処理を実行してから条件を判定します。基本的な書き方を見てみましょう。
do-while 文の基本構文
public class DoWhileExample {
public static void main(String[] args) {
int count = 1;
do {
System.out.println("現在の回数: " + count);
count++; // ループごとに count を増やす
} while (count <= 5); // count が 5 以下なら繰り返す
}
}
現在の回数: 1
現在の回数: 2
現在の回数: 3
現在の回数: 4
現在の回数: 5
do-while 文の構造
- 処理部分(
do { 処理 }):まず 1 回実行される - 条件(
while (条件)):条件がtrueの間、ループを継続 - 通常の while 文とは異なり、条件が
falseでも 1 回は必ず実行される
例えば、count = 1 から始めて、count の値が 5 以下の間ループし、count++ で値を増やしていきます。
do-while 文のポイント
- 必ず 1 回は実行される
- 条件が最初に
falseでも、1 回だけ処理が実行される - 繰り返し処理の回数が不定の場合に便利
例えば、条件を count > 10 にすると、通常の while 文では一度も実行されませんが、do-while 文なら 1 回は実行されます。
do-while 文と while 文の違い
| 比較項目 | do-while 文 | while 文 |
|---|---|---|
| 条件の判定タイミング | 処理の後で判定 | 処理の前で判定 |
| 最低実行回数 | 1 回は必ず実行 | 条件が false なら 0 回 |
| 適した場面 | ユーザー入力の受付や、最低 1 回の実行が必要な処理 | 事前に条件をチェックしたい場合 |
while 文との動作の違い
while 文を使った場合
public class WhileExample {
public static void main(String[] args) {
int count = 10;
while (count < 5) { // 10 は 5 より小さくないので、ループは実行されない
System.out.println("現在の回数: " + count);
count++;
}
}
}
(何も表示されない)
do-while 文を使った場合
public class DoWhileExample {
public static void main(String[] args) {
int count = 10;
do {
System.out.println("現在の回数: " + count);
count++;
} while (count < 5); // 条件を満たさないが、1 回は実行される
}
}
現在の回数: 10
どちらを使うべきか?
- 繰り返し処理が 0 回の可能性がある場合 … while 文が適している
- 最低 1 回の実行が必要な処理 … do-while 文を使う
- ユーザー入力の受付など … do-while 文が便利
例えば、メニューを表示してユーザーの入力を待つ場合など、do-while 文が適しています。
3. do-while 文を使って数値を繰り返し処理する方法
do-while 文を使うことで、数値を増やしながら繰り返し処理を行うことができます。例えば、「1 から 10 までの数字を表示する」プログラムを作成してみましょう。
数値を繰り返し処理する do-while 文の例
public class DoWhileLoopExample {
public static void main(String[] args) {
int num = 1;
do {
System.out.println("現在の数値: " + num);
num++; // num の値を 1 ずつ増やす
} while (num <= 10); // num が 10 以下ならループを継続
}
}
現在の数値: 1
現在の数値: 2
現在の数値: 3
現在の数値: 4
現在の数値: 5
現在の数値: 6
現在の数値: 7
現在の数値: 8
現在の数値: 9
現在の数値: 10
ポイント
- 条件
num <= 10を満たす間、ループが続く - ループのたびに
numを 1 ずつ増加させる - 10 に達すると条件が
falseになり、ループが終了する
このように、do-while 文を使うと、特定の範囲の数値を扱う処理を簡単に記述できます。
4. do-while 文を使ってユーザー入力を繰り返し処理する方法
do-while 文は、ユーザーが特定の入力をするまで繰り返し処理を行うのにも適しています。例えば、ユーザーが「exit」と入力するまで、文字列を受け付けるプログラムを作成してみましょう。
ユーザー入力を繰り返し処理する do-while 文の例
import java.util.Scanner;
public class DoWhileUserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input;
do {
System.out.print("入力してください(終了するには 'exit' を入力): ");
input = scanner.nextLine();
System.out.println("あなたの入力: " + input);
} while (!input.equals("exit")); // "exit" が入力されるまで繰り返す
System.out.println("プログラムを終了します。");
scanner.close();
}
}
入力してください(終了するには 'exit' を入力): こんにちは
あなたの入力: こんにちは
入力してください(終了するには 'exit' を入力): Java
あなたの入力: Java
入力してください(終了するには 'exit' を入力): exit
あなたの入力: exit
プログラムを終了します。
ポイント
- ユーザーが「exit」を入力するまでループが続く
scanner.nextLine()でユーザーの入力を取得- do-while 文なので、1 回は必ず入力処理が実行される
この方法を使うと、ユーザーの入力に応じた処理を簡単に作成できます。
5. do-while 文と while 文の違い
do-while 文と while 文は、どちらも繰り返し処理を行うための構文ですが、それぞれの用途が異なります。do-while 文と while 文の違いを比較してみましょう。
do-while 文と while 文の比較
| 比較項目 | do-while 文 | while 文 |
|---|---|---|
| ループの適用範囲 | 最低 1 回は必ず実行される | 条件が満たされない場合は 1 回も実行されない |
| 条件の書き方 | 処理を実行した後に条件をチェック | 最初に条件をチェックしてから処理を実行 |
| 適した場面 | ユーザー入力のように「最低 1 回は実行」が必要な場合 | 事前に条件を満たしているか確認してから実行する場合 |
while 文との動作の違い
while 文を使った場合
public class WhileExample {
public static void main(String[] args) {
int count = 10;
while (count < 5) { // 10 は 5 より小さくないので、ループは実行されない
System.out.println("現在の回数: " + count);
count++;
}
}
}
(何も表示されない)
do-while 文を使った場合
public class DoWhileExample {
public static void main(String[] args) {
int count = 10;
do {
System.out.println("現在の回数: " + count);
count++;
} while (count < 5); // 条件を満たさないが、1 回は実行される
}
}
現在の回数: 10
どちらを使うべきか?
- 繰り返し処理が 0 回の可能性がある場合 … while 文が適している
- 最低 1 回の実行が必要な処理 … do-while 文を使う
- ユーザー入力の受付など … do-while 文が便利
例えば、メニューを表示してユーザーの入力を待つ場合など、do-while 文が適しています。
6. do-while 文を使った応用例(特定の条件でループを抜ける)
do-while 文を使って特定の条件でループを抜ける方法を学びましょう。例えば、ユーザーが特定の数字を入力したらループを終了するプログラムを作成してみます。
特定の条件でループを抜ける do-while 文の例
import java.util.Scanner;
public class DoWhileBreak {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num;
do {
System.out.print("数値を入力してください(0 を入力すると終了): ");
num = scanner.nextInt();
System.out.println("あなたが入力した数値: " + num);
if (num == 0) {
System.out.println("0 が入力されたのでループを終了します。");
break;
}
} while (true); // 無限ループだが、0 が入力されると break で抜ける
scanner.close();
}
}
数値を入力してください(0 を入力すると終了): 5
あなたが入力した数値: 5
数値を入力してください(0 を入力すると終了): 3
あなたが入力した数値: 3
数値を入力してください(0 を入力すると終了): 0
あなたが入力した数値: 0
0 が入力されたのでループを終了します。
ポイント
- ユーザーが 0 を入力すると
breakを使ってループを終了 - 最初に入力を求めるため、少なくとも 1 回は必ず実行される
- ループを抜けるための条件を適切に設定することが重要
この方法を使うと、特定の条件でループを制御することができます。
7. do-while 文を使った応用例(合計を求める)
do-while 文を使って、複数の数値を入力し、その合計を求めるプログラムを作成してみましょう。ユーザーが 0 を入力するまで数値を足し続けます。
do-while 文で合計を求める例
import java.util.Scanner;
public class DoWhileSum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int num;
do {
System.out.print("数値を入力してください(0 を入力すると合計を表示): ");
num = scanner.nextInt();
sum += num; // 入力された数値を加算
} while (num != 0); // 0 が入力されたらループを終了
System.out.println("合計: " + sum);
scanner.close();
}
}
数値を入力してください(0 を入力すると合計を表示): 5
数値を入力してください(0 を入力すると合計を表示): 10
数値を入力してください(0 を入力すると合計を表示): 3
数値を入力してください(0 を入力すると合計を表示): 0
合計: 18
ポイント
- ユーザーが 0 を入力するまで数値を加算
- ループのたびに
sum += numで合計を計算 - 少なくとも 1 回は実行されるので、初回入力が必ず処理される
この方法を使うと、簡単に複数の数値の合計を求めるプログラムを作成できます。
8. 練習問題:do-while 文を使ったプログラムを作ろう
do-while 文の使い方をしっかり理解するために、以下の練習問題に挑戦してみましょう。
問題 1: ユーザーが「yes」と入力するまで繰り返すプログラム
ユーザーに「yes」と入力してもらうまでメッセージを表示し続けるプログラムを作成してください。
import java.util.Scanner;
public class DoWhileYes {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input;
do {
System.out.print("「yes」と入力してください: ");
input = scanner.nextLine();
} while (!input.equalsIgnoreCase("yes")); // "yes" が入力されるまで繰り返す
System.out.println("「yes」が入力されたので終了します。");
scanner.close();
}
}
「yes」と入力してください: いいえ
「yes」と入力してください: はい
「yes」と入力してください: yes
「yes」が入力されたので終了します。
問題 2: 1 から 100 までの偶数の合計を求めるプログラム
1 から 100 までの偶数を合計して表示するプログラムを作成してください。
public class DoWhileEvenSum {
public static void main(String[] args) {
int num = 2;
int sum = 0;
do {
sum += num; // 偶数を加算
num += 2; // 次の偶数に進む
} while (num <= 100); // 100 以下の偶数を処理する
System.out.println("1 から 100 までの偶数の合計: " + sum);
}
}
1 から 100 までの偶数の合計: 2550
問題 3: ユーザーが負の数を入力するまで数値を加算するプログラム
ユーザーが負の数を入力するまで、入力された数値を合計し、負の数が入力されたら結果を表示するプログラムを作成してください。
import java.util.Scanner;
public class DoWhileNegativeStop {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int num;
do {
System.out.print("数値を入力してください(負の数を入力すると終了): ");
num = scanner.nextInt();
if (num >= 0) {
sum += num; // 正の数なら合計に加算
}
} while (num >= 0); // 負の数が入力されたらループを終了
System.out.println("合計: " + sum);
scanner.close();
}
}
数値を入力してください(負の数を入力すると終了): 8
数値を入力してください(負の数を入力すると終了): 15
数値を入力してください(負の数を入力すると終了): -5
合計: 23
まとめ
do-while 文を使うと、最低 1 回は処理を実行し、その後条件を満たすまで繰り返すことができます。今回の練習問題を解きながら、しっかりと理解を深めてください。