Java道|do~while文のしくみと使い方

まず1回やってみる。
do~while文を覚えると、Javaの繰り返し処理を「実行してから判断する」形で書けるようになる。

これまでに、for文とwhile文を使った繰り返し処理を学んできました。

for文は、何回繰り返すかがはっきりしている処理に向いていました。
たとえば、5回表示する、1から10まで順番に処理する、指定した回数だけ記号を出す、といった場面です。

while文は、条件を先に確認してから処理を行う繰り返しでした。
そのため、最初の時点で条件が false なら、ブロックの中は1回も実行されません。

今回学ぶ do~while文 は、while文とよく似ていますが、処理の順番が少し違います。

do~while文では、まずブロック内の処理を1回実行し、そのあとで条件を確認します。つまり、条件が最初から false であっても、最初の1回は必ず実行されます。この特徴により、メニューを最低1回は表示したい場合や、入力をまず受け付けてから続けるか判断したい場合に使いやすい構文です。この記事では、指定内容に沿って Sample6.java のみを使い、do~while文の基本、while文との違い、注意点、プログラムの基本構造とのつながりを、鬼滅の刃風の世界観にたとえながら整理します。

鬼滅の刃風にたとえると、do~while文は「まず一度、型を出してから、続けるかどうかを判断する修行」です。
while文は「条件を見てから型を出す」。
do~while文は「まず型を出して、そのあと続行するか確認する」。
この順番の違いが、do~while文のいちばん大切な特徴です。

do~while文とは何か

do~while文は、ブロックの中の処理を先に実行し、そのあとで条件を確認する繰り返し文です。

基本の形は次のようになります。

do{
    文;
    ...
}while(条件);

↓クリックすると拡大表示されます。

この構文では、まず do のブロック内を実行します。
そのあとで、while の条件を確認します。

条件が true なら、もう一度 do ブロックに戻って処理を繰り返します。
条件が false なら、do~while文を終了します。

条件の結果do~while文の動き
trueもう一度ブロック内の処理を実行する
false繰り返しを終了する

ここで特に大切なのは、条件確認が後にあることです。
そのため、do~while文では、最初の1回は必ず処理されます。

鬼滅の刃風にたとえると、do~while文は「まず一度、試しに型を出す」流れです。
そのあとで「まだ続ける条件を満たしているか」を確認し、続けるならもう一度型を出します。

do~while文の流れ

do~while文の流れは、次のようになります。

手順内容
1まずブロック内の処理を実行する
2条件を確認する
3条件が true なら、もう一度ブロック内を実行する
4条件が false なら終了する

while文と比べると、条件を確認するタイミングが違います。

条件を調べるタイミング
while文処理の前
do~while文処理の後

while文では、最初に条件を調べます。
そのため、条件が最初から false なら、処理は1回も実行されません。

一方、do~while文では、先に処理を実行します。
そのため、条件が最初から false でも、ブロック内の処理は1回だけ実行されます。

この違いが、do~while文を使い分けるうえでとても重要です。

while文との違い

while文と do~while文 は、どちらも条件によって繰り返しを続ける構文です。
ただし、決定的に違うのは、条件判定の位置です。

while文の考え方

while(条件){
    処理
}

while文では、処理の前に条件を確認します。

条件が true なら処理を実行します。
条件が false なら、処理を実行せずに終了します。

do~while文の考え方

do{
    処理
}while(条件);

do~while文では、まず処理を実行します。
そのあとで条件を確認します。

そのため、条件が最初から false でも、最初の1回は実行されます。

比較項目while文do~while文
条件判定の位置先に判定する後で判定する
最低実行回数0回のことがある必ず1回以上
向いている場面条件を満たすときだけ始めたいとりあえず1回は実行したい
考え方条件を見てから実行実行してから条件を見る

鬼滅の刃風にたとえると、while文は「敵の気配があるなら警戒行動をする」です。
最初から敵の気配がなければ、警戒行動はしません。

do~while文は「まず一度、周囲を確認してから、まだ警戒を続けるか判断する」です。
最初の確認は必ず行われます。

日常のイメージで考える do~while文

do~while文は、日常の行動に置き換えると分かりやすくなります。

たとえば、メニュー表示を考えてみます。

まずメニューを1回表示します。
そのあとで、もう一度選ぶかどうかを確認します。
続けるなら、またメニューを表示します。
終わるなら終了します。

流れdo~while文の考え方
まずメニューを表示するdo ブロックを実行
続けるか確認するwhile の条件を確認
続けるなら戻る条件が true
終了するなら抜ける条件が false

このように、do~while文は「先に1回やることが自然な処理」に向いています。

鬼滅の刃風にたとえると、任務前の指令確認で、まず一度は指令札を開きます。
そのあと「続けて確認する必要があるか」を判断します。
この「まず1回確認する」という流れが、do~while文の感覚です。

図:do~while文は処理を先に実行する

↓クリックすると拡大表示されます。

この図が示していること

この図では、do~while文が処理から始まることを示しています。

まず do ブロックの中に入り、メッセージ表示などの処理を実行します。
そのあとで i++ のような更新処理を行い、最後に i <= 5 のような条件を確認します。

条件が true なら、もう一度 do ブロックに戻ります。
条件が false なら、do~while文を終了します。

ここから分かることは、do~while文では条件判定が後ろにあるため、最初の1回は必ず処理されるということです。

do~while文を確認する

ここでは、do~while文を使って、お知らせメッセージを5回表示するプログラムを見ていきます。

ファイル名:Sample6.java

class Sample6
{
    public static void main(String[] args)
    {
        int i = 1;  // 回数を数えるための変数

        do{
            System.out.println(i + "回目のお知らせです。今日も型の修行を続けましょう。");
            i++;  // 次の回数に進める
        }while(i <= 5);

        System.out.println("お知らせの表示が終わりました。");
    }
}

実行結果

1回目のお知らせです。今日も型の修行を続けましょう。
2回目のお知らせです。今日も型の修行を続けましょう。
3回目のお知らせです。今日も型の修行を続けましょう。
4回目のお知らせです。今日も型の修行を続けましょう。
5回目のお知らせです。今日も型の修行を続けましょう。
お知らせの表示が終わりました。

このプログラムでは、最初に i へ 1 を代入しています。

int i = 1;

そのあと、do ブロックの中に入ります。

do{
    System.out.println(i + "回目のお知らせです。今日も型の修行を続けましょう。");
    i++;
}while(i <= 5);

do~while文では、条件を確認する前に、まずブロック内の処理を実行します。

つまり、最初に 1回目のお知らせです。今日も型の修行を続けましょう。 が表示されます。
そのあと、i++ によって i が 2 になります。
そして最後に i <= 5 を確認します。

条件が true なら、もう一度 do ブロックに戻ります。

Sample6.javaの動き

Sample6.java の流れを表で追うと、次のようになります。

i の値 実行前ブロック実行i++ 後の値条件 i <= 5次の動き
11回目を表示2true続ける
22回目を表示3true続ける
33回目を表示4true続ける
44回目を表示5true続ける
55回目を表示6false終了

この表を見ると、do~while文では、先にブロックを実行してから条件を見ていることが分かります。

i が 5 のとき、5回目のメッセージを表示します。
そのあと i++ によって i は 6 になります。
最後に i <= 5 を確認すると false になります。

そのため、do~while文は終了します。

そして、do~while文の外にある次の文が実行されます。

System.out.println("お知らせの表示が終わりました。");

鬼滅の刃風にたとえると、1回目から5回目まで型の知らせを出し、6回目に進む前に「もう条件を満たしていない」と判断して修行を終える流れです。

while文と同じ結果になることもある

do~while文、while文、for文は、同じような結果を作れる場合があります。

たとえば、1から5まで繰り返してメッセージを表示する処理は、for文でもwhile文でもdo~while文でも表現できます。

ただし、構文ごとに「何を自然に表せるか」が違います。

構文得意な表現
for文回数が決まっている繰り返し
while文条件を先に確認してから続ける繰り返し
do~while文まず1回実行してから続けるか判断する繰り返し

大切なのは、「書けるかどうか」だけではありません。
その構文を使うことで、コードの意図が自然に伝わるかどうかです。

do~while文を使うと、「最初の1回は必ず行う」という意図が読み取りやすくなります。

鬼滅の刃風にたとえると、for文は「5回型を出す」、while文は「条件を満たしているなら型を出す」、do~while文は「まず型を出して、そのあと続けるか判断する」という違いです。

do~while文の最大の特徴

do~while文でいちばん重要なのは、最低1回は必ず処理されることです。

この特徴をはっきり見るために、条件が最初から false になる場合を考えます。

int i = 10;

do{
    System.out.println("このメッセージは1回表示されます。");
}while(i < 5);

この場合、i は 10 です。

条件は次の通りです。

i < 5

10 < 5 は false です。

しかし、do~while文では、条件を確認する前にブロック内の処理を実行します。
そのため、このメッセージは1回表示されます。

構文条件が最初から false のとき
while文1回も実行されない
do~while文1回は必ず実行される

この違いはとても大切です。

while文は「条件を満たしているなら実行する」。
do~while文は「まず実行してから、続けるか判断する」。
このように考えると、使い分けやすくなります。

do~while文が向いている場面

do~while文は、最初の1回を必ず行いたい場面に向いています。

場面do~while文が向いている理由
メニューを最低1回は表示したいまず表示してから続けるか判定できる
入力を1回受け取ってから判定したい先に入力処理を実行できる
処理結果を見てから続行を決めたい実行後に条件を調べられる
ゲームの選択画面を表示したい画面を出してから終了するか確認できる
任務確認を最低1回行いたいまず確認してから続行判断できる

たとえば、ゲームのメニュー画面では、最初にメニューを表示しなければ、ユーザーは選択できません。
そのあとで、もう一度表示するか、終了するかを判断します。

このような「まず1回は実行する」流れでは、do~while文が自然です。

鬼滅の刃風にたとえると、任務札を一度も開かずに続けるか判断するのは不自然です。
まず任務札を開き、そのあとで「続けて確認するか」を判断する。
この流れが do~while文 に向いています。

do~while文で気をつけたいこと

do~while文も繰り返し文なので、条件がいつか false になるように書く必要があります。

もし条件に関係する値が変化しなければ、終わらないループになる可能性があります。

たとえば、次のようなコードは注意が必要です。

int i = 1;

do{
    System.out.println(i + "回目です。");
}while(i <= 5);

このコードでは、i の値が変わっていません。

そのため、i <= 5 はずっと true のままです。
結果として、処理が何度も続いてしまいます。

注意点内容
更新を書き忘れる無限ループになる
条件式を間違える回数がずれる
do と while の形を混同する構文ミスにつながる
最後の ; を忘れるdo~while文では ; が必要
ブロックの範囲を見落とすどこまで繰り返すか分かりにくくなる

特に注意したいのは、最後のセミコロンです。

do~while文では、最後の while(条件) のあとにセミコロンを書きます。

do{
    処理
}while(条件);

while文だけを学んだ直後だと、この最後の ; を忘れやすいです。
do~while文では、構文の一部として必要なので、しっかり意識しておくと安心です。

鬼滅の刃風にたとえると、最後の ; は「この繰り返しの型はここで一区切り」という印です。
書き忘れると、構文として正しくまとまりません。

図:while文とdo~while文の違い

↓クリックすると拡大表示されます。

この図が示していること

この図では、while文とdo~while文の違いを比較しています。

左側の while文 は、最初に条件を確認します。
条件が true なら処理を実行し、false なら最初から何も実行せずに終了します。

右側の do~while文 は、まずブロック内の処理を実行します。
そのあとで条件を確認し、true ならもう一度実行します。
条件が false でも、最初の1回はすでに実行されています。

ここから分かることは、while文とdo~while文の大きな違いは、条件判定のタイミングにあるということです。

プログラムの基本構造も見ておこう

Javaのプログラムの流れは、大きく分けると次の3つの基本構造で考えられます。

基本構造内容代表的な構文
順次上から順番に処理する通常の文の並び
選択条件によって処理を分けるif文、switch文
反復条件に応じて繰り返すfor文、while文、do~while文

↓クリックすると拡大表示されます。

順次

順次は、処理を上から順番に実行していく流れです。

処理1;
処理2;
処理3;

プログラムのもっとも基本になる形です。

選択

選択は、条件によって進む先を変える流れです。

if文やswitch文がこれにあたります。

条件進む処理
true条件に合う処理
false条件に合わない処理

鬼滅の刃風にたとえると、任務札の番号や敵の状態を見て、進む道を選ぶ流れです。

反復

反復は、条件に応じて同じ処理を何度も行う流れです。

for文、while文、do~while文がここにあたります。

反復構文特徴
for文回数が分かりやすい
while文条件を先に確認する
do~while文まず1回実行してから条件を確認する

do~while文は、この反復の基本構造の1つです。

単独の構文として覚えるだけでなく、「繰り返し処理の仲間」として位置づけると、Java全体の流れが見えやすくなります。

do~while文を読むときのポイント

do~while文を読むときは、次の順番で確認すると分かりやすいです。

見るポイント確認すること
do ブロックまず何を実行するか
更新処理条件に関係する値が変わるか
while の条件続ける条件は何か
最後のセミコロンwhile(条件); の形になっているか
終了タイミングいつ false になるか

Sample6.java なら、次のように整理できます。

注目点内容
初期値i = 1
まず実行する処理お知らせメッセージを表示
更新i++
条件i <= 5
終了i が 6 になったとき

このように見ると、do~while文の流れがかなり追いやすくなります。

do~while文を学ぶ意味

do~while文は、while文とよく似ています。
そのため、最初は違いが小さく見えるかもしれません。

しかし、最低1回は必ず実行されるという特徴は、実際のプログラムではとても大きな意味があります。

使いたい場面do~while文が合う理由
まず1回表示したい表示してから条件を確認できる
まず1回入力を受けたい入力後に続けるか判断できる
まず処理してから判定したい結果を見て継続判断できる
メニューを繰り返したい最初のメニュー表示を保証できる

for文、while文、do~while文は、どれも繰り返しを書くための構文です。
ただし、それぞれ得意な場面が少しずつ違います。

構文特徴
for文回数を管理しやすい
while文条件を先に見て繰り返す
do~while文まず1回実行してから条件を見る

do~while文で特に大切なのは、次の3つです。

大切なこと内容
ブロックを先に実行する条件確認より処理が先
そのあとで条件を確認する続けるかどうかを後で判断
最低1回は必ず処理される条件が最初から false でも1回は実行

鬼滅の刃風にたとえると、do~while文は「まず一度、型を出してから、続けるか判断する反復の型」です。
この感覚を身につけると、メニュー処理、入力確認、ゲームの選択画面など、実用的な繰り返し処理をより自然に書けるようになります。