Developer

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

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

はじめてのJava

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


繰り返し文(while文)

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

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

目次


while文

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

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

while文の使い方の基本

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

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

while文は「条件式を満たす場合に」繰り返し処理を行います。
条件式の結果が「true」になっている間は繰り返し処理を行い続けます。

つまり、while文の条件式を定義する際には「繰り返しの操作等によっていずれfalseになる」ように条件式を定義する必要があります。

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

int sum = 0;
int i = 1;

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

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

上で例に挙げている1から10までの数字を順に足すプログラムでは、変数iを定義しており、1を代入しています。
「i < 11」という条件を満たす間は繰り返しを行うという条件になっています。{}の中の処理のなかで、iに1を足すという処理が入っているので、iの値は1,2,3,4,...と増えていき、11になった時に条件を満たさなくなりますので、iが1~10の間(11の時は{}の中の処理は実行されずに終了するので)の10回の繰り返しが行われるということになります。 条件式に数字を使用しているので、○回繰り返しを行うというようなfor文に近い動作になっていますね。

このwhile文の例ですが、前回for文の時に紹介したサンプルと全く同じ動作をさせています。
for文もwhile文も、何らかの処理を繰り返させるという部分は同じですので、条件や繰り返し処理をうまく定義することで同じ操作ができます。

while文をうまく扱うために押さえておくポイントは1つです。
・while文は条件式を使用して繰り返し処理を行うかどうかを決めているので、繰り返し処理の中などでいずれ条件式が「false」になるように条件を設定する。


while文の特殊な使い方を紹介します。
また、その場合の動作について注意しておかなければならないことがあります。

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

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

プログラムによっては、意図的に無限ループを発生させ、繰り返しの中で何らかの条件によって強制的にループを終了するといった処理を行うこともできます。
そのような場合には、この無限ループをさせるwhile文を利用することもあります。
強制的にループを終了させる処理に関しては、後程の記事で紹介します。

ここで注意しなければならないポイントとして、while文の条件式には「true」は直接書き込むことが出来ますが、「false」を直接書き込むことはできないということです。
直接「false」を書き込んだ場合、条件式が「false」で固定されますので、どんな場合でも繰り返し処理を行うことはありません。
その場合、while文の{}の中のコードが「到達不能コード」という扱いになり、コンパイルエラーになります
変数を利用した式の場合、必ずしも常にfalseとなるわけではありませんので、問題ありません。
※↓のコードはコンパイルエラーになり、実行できません。

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

//一見同じように見えますが、変数を利用しているのでコンパイルエラーは起こりません。
boolean b = false;
while( b ){
    System.out.println( "Hello" );
}

サンプルコード

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

package java_silver;

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

public class InputWhile {

	public static void main(String[] args) {

		System.out.println("繰り返し処理をするならyを入力してください");
		//キーボードから文字の入力を受け付けて、入力された文字を変数inputに代入しています。
		String input = new Scanner(System.in).next();

		while(input.equals("y")) {

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

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

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

実行結果

サンプルコードでは、キーボードから入力された文字によって繰り返し処理を行うか判定しています。
始めの入力で「y」と入力したら、while文の中の繰り返し処理に入ります。
繰り返し処理の中で、再度キーボードから入力を受け付ける処理を書いていますので、そこで「y」を入力する限り、何度でも繰り返しが継続します。
「y」以外を入力すると、条件式がfalseになりますので、繰り返し処理が終了し、while文の後に書いている「繰り返しを終了しました。」という文章が出力されます。


基本構文編・次回の内容

今回は繰り返し文の「while文」について説明しました。
次回は繰り返し文の中でも、「do-while文」についての説明を行います。


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


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