ループ ステートメントは、一般的なプログラミング言語のすべてにあります。 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 (ループ条件) が使用され、ループ操作を囲むために中括弧が使用されます。
while ループと do-while ループの違いは次のとおりです。
- 構文は異なります。while ループと比較すると、do-while ループは while キーワードとループ条件を後ろに置き、前に追加の do キーワードと後ろにセミコロンがあります。
- 実行順序は異なります。while ループが最初に判断し、次に実行します。 do-while ループが最初に実行され、次に判断されます。
- 開始時にループ条件が満たされていない場合、while ループは 1 回実行されず、do-while ループは状況に関係なく少なくとも 1 回実行されます。