目次
whileは繰り返し処理
Javaで繰り返し処理で使う「while」構文。
この記事では、Javaの「while」構文を使って、繰り返し処理を行う方法を解説します。
whileの基本
Javaの「while」は、大きく条件式と、処理ブロックで構成され、構文は以下のようになります。
while (条件式) { 処理ブロック }
「while」は、条件式が一致している間、「{」から「}」のブロック内の処理を繰り返し実行します。
では、簡単なサンプルコードで、実際に動かしてみましょう。次の例は、変数 「cnt」が5に達するまで繰り返しを行うコードです。
int number = 1; while (number < 5) { number ++; System.out.println(number); }
サンプルコードを実行すると、次のような実行結果が出力されます。
■ 実行結果
1 2 3 4
では、「while」の条件式が最初から不一致だった場合、どうなるのでしょうか?
答えは、一度も「while」内の処理が実行されません。
試しに、条件式が必ず不一致となる「while」文を作成して実行してみましょう。
int number = 5; while (number < 5) { System.out.println(number); number ++; } System.out.println("終了");
■ 実行結果
終了
結果を見て分かるように、「while」の条件式が最初から不一致だった場合、一度も「while」内の処理が実行されません。
do-whileでループの最後に条件判定
次に「do-while」構文の使い方について解説します。「do-while」は「while」文とは異なり、処理ブロックの最後で条件式の判定をします。
「do-while」の構文は以下の通りです。
do { 処理 } while (条件式);
「do-while」は、処理ブロックの最後で条件式の判定をする為、最初から条件式が一致しない場合でも、必ず1回は処理が実行される点が、「while」と異なります。
実際に、必ず1回は処理が実行されるか、次のサンプルコードで動きを見てみましょう。
int number = 5; do { System.out.println(number); number++; } while (number < 5); System.out.println("終了");
■ 実行結果
5 終了
ループを途中で抜ける「break」
「break」は、ループ処理を途中で抜けたいときに使用します。「break」が実行されると、「while」の外側へ処理が移動します。
実際に、サンプルコードを見ていきましょう。
int number = 1; while (true) { System.out.println(number); if (number >= 5) { break; } number++; }
■ 実行結果
1 2 3 4 5
処理をスキップする「continue」
「continue」は、その時点で繰り返し処理をスキップし、次のループ処理を先頭から実行します。
次のサンプルコードは、変数「number」が偶数の時は、「continue」を実行して、奇数の時だけコンソールに変数「number」の値を出力しています。
int number = 0; while (number < 10) { number++; if (number % 2 == 0) { continue; } System.out.println(number); }
■ 実行結果
1 3 5 7 9
「while」と「for」文の使い分け
Javaには「while」の他に、「for」文でも繰り返し処理ができます。「for」文に出来ることは「while」でも書け、使い分けに困ることもあるでしょう。
使い分けの、明確な基準はありませんが、一般的には、以下の方針で使い分けされることが多いようです。
回数が決まってる繰り返しは「for」
開始と終了のインデックスが決まっいる繰り返し処理は、「for」文が適しています。
例えば以下のようなケースでは、「for」を使用します。
・ 決まった回数の繰り返し
・ 配列/Listの繰り返し
試しに、配列の繰り返し処理を、「while」と「for」で書き比べたものが、以下のサンプルコードです。
▪️ 「while」で配列の繰り返し
int[] intArray = new int[] {10, 30, 50, 70, 100}; int index = 0; while (index < intArray.length) { int value = intArray[index]; System.out.println(value); index++; }
▪️ 「for」で配列の繰り返し
int[] intArray = new int[] {10, 30, 50, 70, 100}; for (int value : intArray) { System.out.println(value); }
「while」で書かれた方は、ソースの行数が多く見にくくなっているのに対し、「for」で書いた方はスッキリ見やすくなっており、ループを抜ける条件の間違いもなさそうです。
回数が決まっていない繰り返しは「while」
繰り返す回数が事前に分かっていない場合は、「while」文が適しています。例えば、ファイルを読み込む処理などは「while」を使います。
Javaでファイルを読み込む場合、事前に行数を把握する事は難しいため、ファイルの1行目から順々に読んでいき、読み込む行が無くなったら(読み込んだ行がnullだったら)繰り返しを終了します。
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { File file = new File("/path/to/file"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String text; // 読み込みむ行が無くなるまで、whileで繰り返し while ((text = br.readLine()) != null) { System.out.println(text); } br.close(); } }
このように、繰り返しを終了する条件が、回数ではなく、条件式で表される場合、「while」を使用します。
繰り返し処理はJavaのキホン
Javaに限らす、繰り返し処理は、プログラミングにおける基本です。この機会にマスターしておきましょう。
「while」をマスターしたら、同じ繰り返し構文の「for」文を以下の記事で学びましょう。
「break」と「continue」の違いは以下の通りです。
break文=繰り返しの処理ブロックから抜け出す
continue文=次のループ処理を先頭から実行
また、「break」および「continue」は、「for」文でも利用できます。