Javaのwhile文とdo-while文の使い方とは?|ループ構文を使いこなそう

エンジニア
マネージャー
Javaのループ構文の種別とは?
Javaで繰り返し(ループ)処理を表す構文には、for文、while文、do-while文があります。
for文は繰り返し回数を制御するカウンタ変数を持ち、主に決まった回数を繰り返す処理に使われます。例えば、変数iをカウンタ変数とし、n回繰り返すループをfor文で記述すると次のようになります。
1 2 3 4 5 |
for (int i = 0; i < n; i++) { // (i+1)回目の処理内容を記述 } |
これに対して、while文やdo-while文は、判定条件が成立する間、繰り返しを続ける構造です。whileという英単語は「~の間」を意味します。以下では、Javaのwhile文とdo-while文について、コードの書き方や使い方を解説します。
Javaのwhileループの使い方
while文では、ループ本体の実行前に指定された条件式を評価し、条件が成立する間、処理を繰り返します。Javaのwhile文の記法は、次の形です。
1 2 3 4 5 |
while (条件式) { // 繰り返し処理の内容を記述 } |
whileループでは次のようなステップで、条件式が真である間、処理を繰り返します。
1 2 3 4 5 |
(1) 条件式を評価 (2) falseならば(5)へ (3) ループ本体を実行 (4) (1)に戻る (5) ループを終了 |
whileループのコード例:その1
ループカウンタを用いた繰り返し処理を、whileループで記述したJavaコード例を示します。カウンタ変数iを0で初期化した後、iが10未満の間、iを1ずつ増加させながらループ処理を実行します。
1 2 3 4 5 6 7 8 |
// whileループの例 int i = 0; while (i < 10) { a[i] = i * 100; i++; } |
同様の処理をfor文で記述する場合には、forの後に変数iの初期化、条件判定、更新を記述します。これに対して、whileの直後に記述するのは条件判定の部分だけです。
カウンタ変数iの初期化をループ開始前に記述することや、更新文をループ本体内の最後に記述するのを忘れないようにしましょう。
whileループのコード例:その2
whileループに向いている処理は、ループ開始時に繰り返し回数が不明な場合です。例えば、データを読み込み、データがある限り処理を続ける場合などに、よく使われます。
テキストファイルから文字を1つずつ読み込み、表示を繰り返すJavaコードの例を示します。
1 2 3 4 5 6 7 8 |
FileReader fr = new FileReader(new File(""test.txt"")); int ch = fr.read(); // 1文字読み込み while (ch != -1) { //読み込んだ文字があれば System.out.println((char)ch); ch = fr.read(); // 次の文字を読み込み } |
このコードでは、test.txtという名前のファイルから、文字を1文字ずつ読み込み、変数chに格納しています。
ループ内でchを処理(この場合はprintlnで表示処理)したら、次の文字を読み込みます。最後の文字まで読み込みが終了したら、次のreadの戻り値は-1になり、whileループを終了します。
テキストファイル内に”XYZ”と記述し、実行した結果は、次のようになります。
1 2 3 4 5 6 7 8 |
$more test.txt XYZ $java while_test X Y Z |
Javaのdo-whileループの記述方法
do-while文では、ループ本体の実行後に指定された条件式を評価し、条件が成立する間、処理を繰り返します。Javaのdo-while文の記法は、次の形です。
1 2 3 4 5 |
do { // 繰り返し処理の内容を記述 } while (条件式); |
最後にセミコロンが必要ですので、忘れないようにしましょう。
do-whileループでは、次のようなステップで、条件式が真である間、処理を繰り返します。
1 2 3 4 5 6 7 |
(1) ループ本体を実行 (2) 条件式を評価 (3) falseならば(5)へ (4) (1)に戻る (5) ループを終了 |
条件式を後で評価するため、ループ本体は必ず1回は実行されます。これは、最初に条件式を評価するfor文やwhile文と異なる点です。
do-whileループのコード例
次のJavaコード例は、繰り返し毎に整数値を増加させていき、ある値を超えたら終了する処理をdo-while文で記述したものです。
1 2 3 4 5 6 7 8 9 |
// do-whileループ int value = 13; do { System.out.println(""value: ""+value); value += 7; } while (value < 30); System.out.println(""ループを抜けました。value: ""+value); |
実行結果は、次のようになります。
1 2 3 4 5 6 |
value: 13 value: 20 value: 27 ループを抜けました。value: 34 |
do-while文とwhile文の比較
上のコード例で、valueの初期値を35に変更してみましょう。条件式はvalueが30未満です。実行結果は次のようになります。
1 2 3 4 |
value: 35 ループを抜けました。value: 42 |
次に、同じ条件式のwhileループを書いてみましょう。
1 2 3 4 5 6 7 8 9 |
// whileループ value = 35; while (value < 30) { System.out.println(""value: ""+value); value += 7; } System.out.println(""whileループを抜けました。value: ""+value); |
実行結果は、次のようになります。
1 2 3 |
whileループを抜けました。value: 35 |
このように、初期値が条件を満たしていない場合、while文ではループの繰り返しは実行されませんが、do-while文では1回分が必ず実行されることがわかります。
ループを記述する際には、繰り返し判定のタイミングを意識して、正しい条件判定を行うコードを書いてください。
while文による無限ループの記述方法
whileループの条件式にtrueを記述すると、条件が常に成立し、無限ループになります。コード例を示します。
1 2 3 4 5 |
while (true) { System.out.println(""Hello!""); } |
実行すると、Hello!の出力が止まらずに続きます。Ctrl+Cで中断して下さい。
無限ループの抜け方
trueを条件式に使ったwhileループの記法は、ループ本体内で条件判定を行い、条件を満たした場合にループを抜け出すために、利用するのが一般的です。
ループを抜け出すには、break文やreturn文を用います。breakやreturnでループを抜け出せば、無限ループではなくなります。
break文を用いた記述は、次のようになります。条件を満たすとwhileループの外に抜けます。
1 2 3 4 5 6 7 8 |
while (true) { // 繰り返し処理の内容を記述 if ( 条件式 ) { break; // whileループを抜ける } } |
return文を用いた記述は、次のようになります。return文では、メソッドの処理を終了し、呼び出し元に戻ります。
1 2 3 4 5 6 7 8 |
while (true) { // 繰り返し処理の内容を記述 if ( 条件式 ) { return; // メソッドを抜ける } } |
条件trueを使ったwhile文のコード例
条件式がtrue のwhile文で、判定条件を満たしたらループを抜け出すJavaコードの例を示します。
次のコードでは、ループ内で乱数を発生させ、0から99の整数値を取得します。乱数で生成した値が当たりの値(SPECIAL_VAL)と一致したら、ループを抜け出し終了します。
1 2 3 4 5 6 7 8 9 10 |
int random_val; while (true) { // 0から99の整数値を乱数で取得 random_val = (int)(Math.random()*100); System.out.println(""random_val: "" + random_val); if (random_val == SPECIAL_VAL) { break; } } |
1 |
エンジニア
マネージャー
Javaのwhileの使い方まとめ
Javaのwhile文とdo-while文は、指定した条件が成立する間、繰り返しを続けるループ構文ですが、これらは条件判定のタイミングが異なります。
while文では繰り返し本体の処理の前に、do-while文は繰り返し本体の処理後に、指定された条件を判定し、繰り返しを続けるかどうかを決めます。
条件式をtrueに指定すると、無限ループを記述することができます。一定回数の繰り返しを実行するfor文と合わせて、Javaのループ構文を使いこなしてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)