この記事では、Javaのdo-while文の基本から、while文との違い、そして実践的な使い方まで、サンプルコードを交えて分かりやすく解説します。
この記事を読み終える頃には、do-while文を自信を持って使えるようになっているでしょう。
この記事で学べること
- do-while文の基本的な書き方と処理の流れ
- while文との決定的な違いと使い分け方
- do-while文が役立つ具体的な5つの使い方
- 初心者が陥りやすい無限ループなどの注意点
Javaのdo-while文ってなんだろう?
ここでは、Javaの繰り返し処理におけるdo-while文の役割と、その特徴について説明します。最低1回は処理を実行したい、という場面で活躍するループ処理の基本を掴みましょう。
- この記事で学べること
- ループ処理の基本をおさらい
do-while文の立ち位置
プログラミングでは、同じような処理を何度も繰り返す場面がたくさんあります。その際に使うのが「ループ(繰り返し)処理」です。
Javaには主に「for文」「while文」「do-while文」の3つのループ文が用意されています。do-while文は、ループ内の処理を最低1回は必ず実行したい場合に使う、特殊なループ文です。
例えば、ATMで操作が終わった後に「取引を続けますか?」と一度は必ず表示されますよね。あのように、最初の条件に関わらず一度は動かしたい処理にピッタリです。
ループ処理の基本をおさらい
ループ処理とは、特定の条件が満たされている間、同じ処理を何度も実行する仕組みのことです。
条件を間違えると、処理が無限に続いてしまう「無限ループ」に陥ることもあるため、正しい知識が求められます。
まずは基本!Javaのdo-while文の書き方
ここでは、do-while文の基本的な構文と、実際のコード例を紹介します。処理がどのような順番で動くのか、図解も交えて直感的に理解を深めていきましょう。
- do-while文の基本構文
- 簡単なサンプルコードで動きを確認しよう
- 処理の流れをイラストで理解!
do-while文の基本構文
do-while文は、以下の形で記述します。while文と異なり、ブロックの後に条件式が来て、文の最後にセミコロン(;)が付くのが特徴的です。
do { // 繰り返したい処理 } while (条件式);
サンプルコードで動きを確認しよう
実際にコードを見て、動きを確認してみましょう。以下のコードは、変数 `i` が5になるまで、数値を出力し続ける簡単な例です。
public class DoWhileExample { public static void main(String[] args) { int i = 1; // カウンター変数を初期化 do { System.out.println("現在の数値は " + i + " です。"); i++; // 変数iを1増やす } while (i <= 5); // iが5以下の間、処理を繰り返す System.out.println("ループが終了しました。"); } }
実行結果
現在の数値は 1 です。 現在の数値は 2 です。 現在の数値は 3 です。 現在の数値は 4 です。 現在の数値は 5 です。 ループが終了しました。
処理の流れをイラストで理解!
do-while文の処理の流れは、言葉で聞くより図で見ると分かりやすいです。まず処理を実行し、その後に条件を判定します。
[ スタート ] ↓ ┌─────────────┐ │ 処理を実行 │ └─────────────┘ ↓ < 条件判定 > | ( true ) | └─────────┘ ↓ ( false ) [ 終了 ]
この流れがdo-while文の核心部分になります。
より正確な情報を確認したい場合は、Java公式チュートリアルも参照すると良いでしょう。
ここが重要!while文とdo-while文の決定的な違い
ここでは、do-while文と非常によく似たwhile文との違いを明確にします。条件を判定するタイミングが異なる点を理解すれば、どちらをいつ使うべきか迷わなくなります。
- 条件をチェックするタイミングが違う
- コードで比較!実行回数の違いを見てみよう
- どっちを使う?使い分けの判断基準
条件をチェックするタイミングが違う
while文とdo-while文の最大の違いは、条件をチェックするタイミングです。
- while文: ループ処理の前に条件を判定する(前判定)
- do-while文: ループ処理の後に条件を判定する(後判定)
この違いにより、ループ処理が一度も実行されない可能性があるwhile文に対し、do-while文は最低でも1回は実行が保証されます。
使い分けのポイント
処理を実行する前に条件を確かめたいならwhile文。
一度処理をしてから、続けるかどうかを判断したいならdo-while文を選びましょう。
コードで比較!実行回数の違いを見てみよう
最初の条件が`false`の場合、どうなるかを見てみましょう。
while文の例
int num = 10; while (num < 5) { // この処理は一度も実行されない System.out.println("whileループ内の処理"); num++; } System.out.println("whileループ終了");
実行結果
whileループ終了
do-while文の例
int num = 10; do { // 条件がfalseでも、この処理は1回だけ実行される System.out.println("do-whileループ内の処理"); num++; } while (num < 5); System.out.println("do-whileループ終了");
実行結果
do-whileループ内の処理 do-whileループ終了
どっちを使う?使い分けの判断基準
二つのループ文の使い分けを、以下の表にまとめました。
項目 | do-while文 | while文 |
---|---|---|
条件判定 | 後判定 | 前判定 |
初回実行 | 必ず1回は実行される | 条件次第で実行されない |
主な用途 | メニュー選択、入力値チェック | 一般的な条件ループ |
Javaのdo-while文が輝く!実践的な使い方5選 ✨
ここでは、do-while文が特に役立つ実践的なシナリオを5つ、具体的なサンプルコード付きで紹介します。どのような場面でdo-while文が活きるのか、イメージを膨らませてみましょう。
- 1. ユーザーからのメニュー選択
- 2. 入力値のバリデーション(入力チェック)
- 3. 「もう一度やりますか?」の確認
- 4. パスワードの入力
- 5. ランダムな値の生成と条件判定
ユーザーからのメニュー選択
ユーザーに選択肢を提示し、正しい入力があるまで繰り返す処理です。最初に必ずメニューを表示する必要があるため、do-while文が最適です。
import java.util.Scanner; public class MenuSelection { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int choice; do { System.out.println("--- メニュー ---"); System.out.println("1: 検索"); System.out.println("2: 登録"); System.out.println("3: 終了"); System.out.print("番号を入力してください: "); choice = scanner.nextInt(); } while (choice != 3); // 3が入力されるまで繰り返す System.out.println("プログラムを終了します。"); scanner.close(); } }
入力値のバリデーション(入力チェック)
ユーザーに数値を入力してもらい、それが特定の範囲内(例:1〜100)であるかチェックします。不正な値が入力された場合に再入力を促す処理で、do-while文が役立ちます。
import java.util.Scanner; public class InputValidation { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int number; do { System.out.print("1から100までの数値を入力してください: "); number = scanner.nextInt(); } while (number < 1 || number > 100); // 範囲外ならループ System.out.println("入力された数値: " + number); scanner.close(); } }
「もう一度やりますか?」の確認
何かの処理を実行した後に、ユーザーに処理を繰り返すか尋ねる定番のパターンです。最低1回はメインの処理を実行するため、do-while文が自然にマッチします。
import java.util.Scanner; public class RetryLogic { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String answer; do { // ここにメインの処理(例:計算、ゲームなど)が入る System.out.println("処理を実行しました。"); System.out.print("もう一度実行しますか? (y/n): "); answer = scanner.next(); } while (answer.equalsIgnoreCase("y")); // "y"か"Y"なら繰り返す System.out.println("処理を終了します。"); scanner.close(); } }
パスワードの入力
正しいパスワードが入力されるまで、繰り返し入力を求める処理です。ユーザーに最低1回はパスワードを入力させる必要があるため、do-while文が適しています。
import java.util.Scanner; public class PasswordCheck { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String correctPassword = "password123"; String inputPassword; do { System.out.print("パスワードを入力してください: "); inputPassword = scanner.next(); } while (!inputPassword.equals(correctPassword)); System.out.println("ログイン成功!"); scanner.close(); } }
ランダムな値の生成と条件判定
特定の条件を満たすランダムな値が得られるまで、生成を繰り返す処理です。最初に一度、値を生成する必要があるので、do-while文を使うとコードが簡潔になります。
import java.util.Random; public class RandomNumberGen { public static void main(String[] args) { Random random = new Random(); int randomNumber; do { randomNumber = random.nextInt(100); // 0から99までの乱数を生成 System.out.println("生成された数値: " + randomNumber); } while (randomNumber < 90); // 90以上の数値が出るまで繰り返す System.out.println("条件を満たす数値 " + randomNumber + " が出ました。"); } }
もっと便利に!do-while文と組み合わせる制御文
ここでは、ループ処理をさらに細かくコントロールするための`break`文と`continue`文を紹介します。do-while文と組み合わせることで、より柔軟な処理が実現可能です。
- ループを強制終了する「break」
- 処理をスキップする「continue」
ループを強制終了する「break」
`break`文を使うと、ループの条件式に関わらず、強制的にループを抜け出すことができます。特定の条件が満たされたら、即座にループを終了させたい場合に使います。
int count = 0; do { System.out.println("count: " + count); if (count == 3) { System.out.println("3になったのでループを抜けます。"); break; // ループを強制終了 } count++; } while (count < 10);
処理をスキップする「continue」
`continue`文は、ループ内の残りの処理をスキップして、すぐに次の条件判定に進むために使います。特定の条件の時だけ、一部の処理を飛ばしたい場合に便利です。
int num = 0; do { num++; if (num % 2 == 0) { // 偶数の場合はスキップ continue; } System.out.println("奇数: " + num); } while (num < 10);
初心者がハマりがち!do-while文の注意点とエラー対策
ここでは、do-while文を使う上で初心者が陥りやすいミスとその対策を解説します。特に無限ループはプログラムが停止しなくなる厄介な問題なので、原因をしっかり理解しておきましょう。
- 恐怖の「無限ループ」に陥らないために
- 忘れがち!while(条件式)の後の「;」
- よくあるコンパイルエラーと解決策
恐怖の「無限ループ」に陥らないために
無限ループとは、ループの終了条件が永遠に満たされず、処理が終わりなく続いてしまう状態です。do-while文では、ループ内で条件判定に使っている変数の値を更新し忘れることが主な原因です。
// 無限ループの悪い例 int i = 1; do { System.out.println("無限ループ中..."); // iの値を更新する処理(i++;など)を忘れている } while (i <= 5);
上のコードでは、変数`i`の値がずっと1のままなので、`i <= 5`という条件が常に`true`となり、ループが終わりません。ループを抜けるための変数の状態変化を必ず記述しましょう。
忘れがち!while(条件式)の後の「;」
do-while文の構文は、`while (条件式);` のように、最後にセミコロンが必要です。
for文やwhile文には不要なため、忘れやすいポイントです。セミコロンを忘れるとコンパイルエラーになるので注意しましょう。
よくあるコンパイルエラーと解決策
セミコロンを忘れると、「';' expected」(セミコロンが必要です)というエラーが出ます。エラーメッセージが表示されたら、まずは`while`の後ろを確認する癖をつけると良いです。
Javaのループ処理を極めよう!
ここでは、do-while文以外のループ処理(for文、while文など)との使い分けを再確認し、さらにJavaの学習を深めたい人へのおすすめリソースを紹介します。
- for文・while文・拡張for文との使い分け
- 学習を深めるためのおすすめリソース
for文・while文・拡張for文との使い分け
Javaにはdo-while文以外にもループ処理があります。それぞれの特徴を理解し、状況に応じて最適なものを選べるようになりましょう。
- for文: 繰り返す回数が決まっている場合に最適。(例:「10回繰り返す」)
- while文: 繰り返す回数が不明で、条件を満たす間ずっと続けたい場合に使う。(例:「ファイルがある間、読み込みを続ける」)
- do-while文: while文と似ているが、最低1回の実行を保証したい場合に使う。(例:「一度表示してから、入力を待つ」)
- 拡張for文: 配列やコレクションの全要素に対して、順番に処理を行いたい場合に使う。
学習を深めるためのおすすめリソース
Javaの学習をさらに進めるには、実際に手を動かしながら学べるリソースが有効です。特に評判が高いのは、書籍『スッキリわかるJava入門』です。図解が豊富でストーリー仕立てになっており、初心者でも挫折しにくい構成で人気があります。
オンライン学習サイトでは、「Progate」や「ドットインストール」などが、基礎から体系的にJavaを学ぶのに役立ちます。
まとめ
この記事では、Javaのdo-while文について、基本から実践までを解説しました。
最後に重要なポイントを振り返りましょう。
- do-while文は、処理を最低1回は実行したいときに使う。
- 条件を判定するタイミングが後である点がwhile文との大きな違い。
- メニュー選択や入力チェックなど、最初に何かを見せたり実行したりする処理と相性が良い。
- 無限ループと、文末のセミコロン忘れに注意する。
do-while文は使う場面が限られますが、適切な場所で使うと非常に強力な武器になります。ぜひ実際のコーディングで活用して、引き出しの多いプログラマーを目指してください。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。