【Java】while文、do-while文について
はじめに
Javaには、条件に応じて処理を分岐する制御構文があります。その中でも、今回は処理を繰り返し続けたい場合に使用するwhile文について説明します。
while文とは
冒頭にも説明した通り、指定された条件が成立(true)する間、繰り返し処理を行う文のことです。
while文の使い方
while文の構文は以下の通りです。
while(条件式) {
処理文; //条件式がtrueの場合に処理文が実行される
}
※処理文が一行で済む場合は、{ }は省略できます。
▼サンプルコード
1. class Main {
2. public static void main(String[] args) {
3. int i = 0;
4. while(i < 3) {
5. System.out.println((i + 1) + "回目の処理です");
6. i++;
7. }
8. System.out.println("処理を終了しました");
9. }
10.}
実行結果:
1.1回目の処理です
2.2回目の処理です
3.3回目の処理です
4.処理を終了しました
while後の( )内の条件式は、boolean値(trueまたはfalse)を返す必要があります。3行目でi変数を0で初期化しています。したがって、4行目の条件判定はtrueが返り、5行目・6行目が実行されます。
処理文を実行した後、再び条件式に制御が移ります。条件式がfalseになった時点で、繰り返し処理は終了して、while文から抜けます。この場合、iが3になった時点で条件式がfalseになるため、while文から抜け、8行目の処理に移ります。
do-while文の使い方
do-while文は、while文と同様に、指定された条件が成立する間繰り返し処理を行います。while文との違いは、while文は先ず条件判定を行ってから処理に入るのに対して、do-while文は、まず一度処理を行ってから条件判定が行われる点です。つまり、do-while文の構文では少なくとも一度は処理が行われることになります。
do-while文の構文は以下の通りです。
do {
処理文;
} while(条件式);
▼サンプルコード
1. class Main {
2. public static void main(String[] args) {
3. int count = 5;
4.
5. //while文の場合
6. while(count != 5 && count > 0) {
7. System.out.println("while :count=" + count);
8. count--;
9. }
10.
11. //do-whileの場合
12. do{
13. System.out.println("do-while :count=" + count);
14. count--;
15. } while(count != 5 && count > 0);
16. }
17.}
実行結果:
1. do-while :count=5
2. do-while :count=4
3. do-while :count=3
4. do-while :count=2
5. do-while :count=1
while文では、まず6行目で条件判定から入ります。条件式はfalseを返すため、一度も実行されることなくwhile文は終了します。
一方で、do-while文では、13行目で文字列が表示されて、14行目で変数countの値が5から4にデクリメントされるため、count > 0がfalseになるまで処理が繰り返されます。
繰り返し文の制御方法
今まで繰り返し文は、条件式の判定結果がtrueである間は処理が繰り返されていました。しかし、ある特定の条件が発生した場合には、例外的に繰り返しから抜けたい場合もあります。そのような制御のことを、繰り返し制御文と言います。繰り返し制御文には、break文とcontinue文があります。
break文
break文は、現在実行中の繰り返し処理を中断して抜け出す時に使用します。
▼サンプルコード
1. class Main {
2. public static void main(String[] args) {
3. int i = 0;
4. while(i < 5) {
5. if((i + 1) > 3) {
6. break;
7. }
8. System.out.println((i + 1) + "回目の処理です");
9 I++;
10. }
11. System.out,println("処理が終了しました");
12. }
13.}
実行結果:
1. 1回目の処理です
2. 2回目の処理です
3. 3回目の処理です
4. 処理が終了しました
このサンプルのwhile文の条件では、変数iが5未満の間は条件が繰り返されます。しかし、変数iが(i + 1) > 3の条件を満たした際に、break句に達するため、(i + 1) > 3がtrueとなった時、while文から抜け出します。
continue文
continue文は、現在実行中の繰り返し処理を中断するのではなく、ブロック内の処理をスキップして条件式に制御を移し、さらに繰り返し処理を続けたい時に使用します。
▼サンプルコード
1. class Main {
2. public static void main(String[] args){
int i = 0;
while (I < 5){
i++;
if(I < 3){
continue;
}
System.out.println(i + "回目の処理です");
}
System.out.println("処理を終了しました");
}
}
実行結果:
1. 3回目の処理です
2. 4回目の処理です
3. 5回目の処理です
4. 処理が終了しました
このサンプルコードでは変数i < 3の間、continue以降の処理は行われず、ループ内の最初の処理に戻ります。変数「i」の「i < 3」という条件が満たされなくなると、ループ内のそれ以降の処理も実行されています。そして、while文の「I < 5」という条件が満たされなくなると、ループ外の処理がされ、全ての処理を終えます。
まとめ
while文を使う場合は、条件を満たした後に、必要ない処理を行わないように「break」や「continue」を組み合わせることで様々な繰り返し文に対応することができます。