Java の while ループと do while ループの詳細

Java の while ループと do while ループの詳細

 
 
ループはプログラムにおける重要なフロー構造の 1 つです。ループ ステートメントを使用すると、プログラム コードを繰り返し実行できます。これは、特定の条件が満たされるまでコードを繰り返す必要がある状況に適しています。

 

ループ ステートメントは、一般的なプログラミング言語のすべてにあります。 Javaで使用されるループ ステートメントは C 言語のループ ステートメントに似ており、主に while、do-while、for が含まれます。さらに、for-each ループ ステートメントは Java 5 以降に導入されました。for-each ループは for ループを変形したもので、コレクションの走査用に特別に設計されています。 for-each はキーワードではありません。

ループ文は、ループ条件が満たされたときに特定のコードを繰り返し実行することができ、この繰り返し実行されるコードをループ本体と呼びます。このループ本体が繰り返し実行される場合、適切なタイミングでループ条件を false に変更してループを終了する必要があります。そうしないとループが実行され続け、無限ループが形成されます。

ループ ステートメントには、次の 4 つの部分が含まれる場合があります。

  • 初期化ステートメント (init ステートメント): 1 つ以上のステートメント。これらのステートメントは一部の初期化作業を完了するために使用され、初期化ステートメントはループの開始前に実行されます。
  • ループ条件 (test_expression): これは、ループ本体を実行するかどうかを決定できるブール式です。
  • ループ本体 (body_statement): この部分はループの本体であり、ループ条件が許せば、このコード ブロックは繰り返し実行されます。コード ブロックにステートメントが 1 行しかない場合、このコード ブロックの中括弧は省略できます。
  • 反復ステートメント (iteration_statement): ループ本体の実行後、ループ条件の評価前に実行される部分で、通常、ループが適切なタイミングで終了するようにループ条件内の変数を制御するために使用されます。

上記の 4 つの部分は一般的な分類にすぎず、すべてのサイクルがこれら 4 つの部分に明確に分割されているわけではありません。

紙面の都合上、この記事では主にwhileとdo-whileを紹介します。 for ループについては、「 Java For ステートメントの詳細な説明」セクションを参照してください。

while ステートメント

while文はJavaの最も基本的なループ文で、最初に判定を行い、一定の条件下でコードを繰り返し実行できるループ構造です。このステートメントはテスト条件を判断する必要があり、条件が true の場合はループ ステートメントを実行し (ループ ステートメントは 1 つ以上にすることができます)、そうでない場合はループから抜け出します。

while ループ ステートメントの構文構造は次のとおりです。

 while(条件式) {
    ステートメントブロック;
} 

ステートメント ブロック内のコードは 1 つ以上のステートメントであり、条件式はループ本体を実行するかどうかを決定する有効なブール式です。中括弧で囲まれたステートメントのブロックは、条件式が true と評価されると実行されます。

実行が完了したら、式が true であるかどうかを再度確認し、true である場合は中括弧内のコードを再度実行し、そうでない場合はループを抜けて while ループの後のコードを実行します。

例1

while ステートメントを使用して 10 の階乗を計算します。具体的なコードは次のとおりです。

 public static void main(String[] args) {
    int i = 1;
    int n = 1;
    while(i <= 10) {
        n=n*i;
        i++;
    }
    System.out.println("10の階乗の結果は:"+n);
} 

上記のコードでは、2つの変数iとnを定義し、ループが実行されるたびにiの値を1ずつ増やし、iの値が10以下かどうかを判定して階乗を実現しています。 n=n*i ステートメントを使用します。 i の値が 10 より大きい場合、ループは実行されなくなり、ループを終了します。

プログラムを実行すると、実行結果は次のようになります。

 10の階乗の結果は:3628800 

do-while ステートメント

先ほど見たように、while ループの条件式が最初に false である場合、ループの本体はまったく実行されません。ただし、最初の条件式が false であっても、while ループを少なくとも 1 回実行する必要がある場合があります。つまり、場合によっては、ループの先頭ではなく、ループの最後で中止式をテストする必要があるということです。

幸いなことに、Java には do-while ループというループが用意されています。 do-while ループ ステートメントも Java で広く使用されているループ ステートメントであり、ループ条件とループ本体で構成されますが、while ステートメントとは少し異なります。 do-while ループ文の特徴は、ループ本体を先に実行してから、ループ条件が真であるかどうかを判断することです。

do-while ステートメントの構文は次のとおりです。

 do {
    ステートメントブロック;
}while(条件式); 

上記ステートメントの実行処理は、まずループ演算を実行し、while の後ろにある条件式が真であるかどうかを判定し、ループ条件を満たしていればループを継続し、満たしていなければループを終了します。 while ステートメントの後に、ループの終了を示すためにセミコロンを使用する必要があります。

例 2

10 の階乗を計算するプログラムを作成します。 do-whileループを使用した実装コードを以下に示します。

 public static void main(String[] args) {
    int number = 1, result = 1;
    do {
        result *= number;
        number++;
    } while (number <= 10);
    System.out.print("10階乗の結果は:" + result);
} 

プログラムの実行後の出力は次のようになります。

10の階乗の結果は:3628800

例 3

書籍システムのおすすめ書籍リストには50件の情報が保存されていますが、1行に10件の情報を表示して5行で表示する必要があります。以下では、do-while ループ ステートメントを使用してこの効果を実現しています。その具体的なコードを以下に示します。

 public static void main(String[] args) {
    int bookIndex = 1;
    do {
        System.out.print(bookIndex+"\t");
        if(bookIndex%10 == 0) {
            System.out.println();
        }
        bookIndex++;
    }while(bookIndex<51);
} 

上記のコードでは、書籍のインデックスを保存するために変数 bookIndex が宣言されており、この変数には最初の書籍から開始するように値 1 が割り当てられています。 do-whileループ本体では、まずbookIndexの値を出力し、次にbookIndexが10で割り切れるかどうかを判定します。割り切れる場合は、現在の行に10個の項目が出力されたことを意味し、改行を出力します。 System.out.println() ステートメントを使用します。次に、bookIndex に 1 を加算します。これは、現在のインデックスを更新することと同じです。最後にwhile式の中で、ループの範囲、つまり50件以内を超えているかどうかを判定します。

プログラムを実行すると、実行結果は以下のようになります。

 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 
while と do-while の比較

while ループと do-while ループはどちらもループ構造である点は同じですが、ループ条件を表現するために while (ループ条件) が使用され、ループ操作を囲むために中括弧が使用されます。

while ループと do-while ループの違いは次のとおりです。

  • 構文は異なります。while ループと比較すると、do-while ループは while キーワードとループ条件を後ろに置き、前に追加の do キーワードと後ろにセミコロンがあります。
  • 実行順序は異なります。while ループが最初に判断し、次に実行します。 do-while ループが最初に実行され、次に判断されます。
  • 開始時にループ条件が満たされていない場合、while ループは 1 回実行されず、do-while ループは状況に関係なく少なくとも 1 回実行されます。
 

「 Java の while ループと do while ループの詳細」についてわかりやすく解説!絶対に観るべきベスト2動画

Java Tutorial for Beginners – Java Do While Loop