Developer

【はじめてのJava】繰り返し文(do-while文)【基本構文編】
2021.01.31
Lv1

【はじめてのJava】繰り返し文(do-while文)【基本構文編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


繰り返し文(while文)

プログラムの中でよく利用する「繰り返し処理」について詳しく解説していきます。

この記事では、「do-while文」の基礎について扱っていきます。

目次


do-while文

Javaで繰り返しを行う場合、利用できる構文は「for文」「while文」「do-while文」の3種類でした。
今回はその中でも「do-while文」について解説していきます。

do-while文は、while文と同じく、回数が明確に決まっていない繰り返し処理を行う場合に適しています。
条件をうまく設定することで、回数を指定した繰り返しを行うこともできますが、回数を指定する場合には、for文を利用する方が可読性も高くなりますので、そちらが好ましいです。

do-while文の使い方の基本

do-while文の書式は以下のようになっています。

do{
    繰り返し実行したい処理 ;
}while(条件式);

do-while文は先に繰り返し処理を行い、その後に「条件式を満たすかどうか」で、もう一度繰り返しを行うかどうか判断します。
条件式の結果が「true」になっている間は繰り返し処理を行い続けます。
do{ … }while(条件式);」のセミコロン(;)をつけ忘れないように注意しましょう。

つまり、do-while文の条件式を定義する際にも「繰り返しの操作等によっていずれfalseになる」ように条件式を定義する必要があります。
while文との違いは、条件式の判定を行うタイミングです。
while文は「繰り返すかどうかの判定」→「繰り返す対象の処理」の順で処理を行うのに対し、do-while文は「繰り返す対象の処理」→「繰り返すかどうかの判定」の順で処理を行います。
先に繰り返す対象の処理を行いますので、最初の時点で条件を満たしていなくても、繰り返す対象の処理が必ず1回は行われるという特徴があります。

(例)1から10までの数字を順に足すプログラム

int sum = 0;
int i = 1;

do{
    sum += i ; //数字を順に足す処理
    i++; //繰り返すたびにiに1を足すことで、いずれ「i < 11」の条件を満たさなくなると繰り返しが終了する
}while( i < 11 );

System.out.println("1から10までの総和は"+sum+"です")

上で例に挙げている1から10までの数字を順に足すプログラムでは、変数iを定義しており、1を代入しています。
do{}の中の処理を先に行い、処理の最後でiに1を足すという処理が入っているので、条件式でのiの値は2,3,4,…と増えていき、11になった時に条件を満たさなくなります。
iが1~10の間(iが10までは次の繰り返しが行われ、do{}の処理の中でiが11になると条件を満たさなくなるので、次の11回目の繰り返しは行われない)の10回の繰り返しが行われるということになります。

このwhile文の例ですが、前回のwhile文の時に紹介したサンプルと全く同じ動作をさせています。
繰り返し処理の部分を先に実行するので、条件式でのiの値は「2,3,4,5,…」と2から始まっています。

do-while文をうまく扱うために押さえておくポイントは1つです。
・do-while文は先に繰り返し処理を実行し、処理が終わった後で条件式を評価するので、初めから条件式を満たさない場合でも必ず1回は繰り返し処理を行うことが出来る。


do-while文は、while文と同じように条件式に直接boolean型の値を書き込むことが出来ます。
その場合、条件式が「true」で固定されますので、どんな場合でも繰り返し処理を行うということになります。
すなわち、意図的に無限ループをさせることが出来ます。
※↓のコードは無限ループになりますので、実行する場合は注意してください。(コマンドプロンプトの場合は[Ctrl] + [C]キー、Eclipseの場合は停止ボタンで停止できます。)

do{ 
    System.out.println( "Hello" );
}while(true); //条件式に直接trueと書き込む。「1 = 1」のような結果がtrueで固定されるような式も同様です。

また、do-while文の条件式には「false」を直接書き込むことも可能になっています。
直接「false」を書き込んだ場合、条件式が「false」で固定されますので、1回目の繰り返し処理を行った後に、どんな場合でも2回目以降の繰り返し処理を行うことはありません。
コンパイルエラーにはなりませんが、do-while文の意味が全くなくなってしまいます。

do{ 
    System.out.println( "Hello" );
}while(false); //条件式に直接falseと書き込む。「0 = 1」のような結果がfalseで固定されるような式も同様です。

サンプルコード

while文を使用したサンプルソースを見ていきます。
繰り返しをさせるための条件を数字以外にするために、キーボードから入力を受け取る処理を使用しています。

package java_silver;

//↓キーボードから入力を受け付けるための準備です。
import java.util.Scanner;

public class InputDoWhile {
	public static void main(String[] args) {

		String input = ""; //inputは空文字で初期化
		do {

			System.out.println("こんにちは!"); //文章を出力

			//キーボードから入力した文字によって繰り返すかどうかを決定します。
			System.out.println("もう一度繰り返すならy、やめるならそれ以外を入力してください");

			//キーボードから文字の入力を受け付けて、入力された文字を変数inputに代入しています。
			input = new Scanner(System.in).next();
		}while(input.equals("y"));

		System.out.println("繰り返しを終了しました。");
	}
}

実行結果

サンプルコードでは、while文の解説と同じようにキーボードから入力された文字によって繰り返し処理を行うか判定しています。
while文では、繰り返し処理に入るためにwhile文の前でもキーボードから入力を受け取っていましたが、do-while文では先に繰り返し処理に入れますので、繰り返し処理の前に入力を受け付ける必要が無くなっています。
始めにinputには「””(空文字)」が代入されています。判定よりも先に繰り返し処理が実行され、その中でキーボードから入力を受け付ける処理を書いています。
そこで「y」を入力する限り、何度でも次の繰り返しが継続します。
「y」以外を入力すると、条件式がfalseになりますので、次の繰り返し処理には映らず、do-while文の後に書いている「繰り返しを終了しました。」という文章が出力されます。


基本構文編・次回の内容

今回は繰り返し文の「do-while文」について説明しました。
次回は繰り返し文とif文などを組み合わせて使用する手法についての説明を行います。


初めてのJavaシリーズの目次はこちら
基本構文編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら