🐈

ITスクールの授業7日目のまとめ1:制御文ー反復文(while / Do - while)

2023/08/08に公開

前書き

今回は制御文の中で、「反復文」をまとめると思う。

反復文は名前の通り、ユーザーが決めた回数ほどコードを繰り返して実行する文法である。ただし、本当にまったく同じコードを反復するというよりは、少しづつコードに変化を入れて、連続する範囲のコード実行や、決めた条件を満足するまで回数が決まってない反復をするなど、明確な目的をもって使える、思うより複雑な文法である。

今回はその反復文の中でも、「while」文と「do - while」文をまとめてみようと思う。while文は条件式を満足するまで無限にコードを実行するので、条件式が間違うとループに入る危険がある。ループに入らないように、必要な反復が終わったら反復文が終わるようにコードを組むことが重要である。


while文

while文は、条件式がTRUEであれば、つまりFALSEになるまでずっとブロックのコードを繰り返して実行する。

詳しい作動方式は下記のようである。

このため、while文を抜け出るための条件やコードをブロックの中に書いておかないと、while文が無限に実行されるループに落ちる危険がある。

while文の形式は下記のようである。


while(TRUEFALSEが決められる条件式){

条件式がTRUEである場合実行するコード

}

上の形式を、実際のコードに変えると下記のようになる。

public static void main(String[] args) {

	int i = 0; // 反復の制御のための変数を宣言
		
	while(i < 5) {
	System.out.println("Hi, Java");
	i++; // このコードがないと、iの値が増えなくて、条件式がfalseになりません。(ずっと「i < 5」がtrueになる。)
	//そうなるとループに落ちますので、気をつけるようにしましょう。
	}
		
	System.out.println("iの最後の値 : " + i);
	System.out.println("反復の回数 : " + (i-1));
		
}//main

while文の条件式に「true」と書くと、基本的にループに落ちる。この場合は条件式で入れた変数を利用してwhile文を抜き出ることができなくて、他の文法を使ってwhile文を抜き出るしかない。例えば、「break;」を使うことができる。

public static void main(String[] args) {
		int i = 0;
		while(true) {
		System.out.println(i);
		if(i == 10) {
		break; // while(true)である場合は、条件式だけではループを抜け出られない。
//そのせいで、「break;」を使って強制的にループを抜け出る。
		}
		i++;
		}
	}

重複while文

条件式に当たってコードが実行されているwhile文の中に、もう1つのwhile文を作成することもできる。

ただし、この場合にはwhile文の中にあるwhile文を制御する変数と、外側のwhile文を制御する変数が必要であるなど、すこし複雑なコードになる。

下記は、重複while文を使って九九の7の段を出力する例文である。


public static void main(String[] args) {
		
	int i = 0;
	int dan = 2;
	
	while(dan <= 9) //外側のwhile文
	{
		i = 0; // while文の外側にある変数であって、反復するたびに0に値を変える。
		System.out.printf("====九九の%d段====\n", dan);
		while(i < 9) { // 内側のwhile文 
		System.out.printf("%d x %d = %d\n", dan, i+1, dan * (i+1));
		i++;
		}//	while(i < 9)
		dan++;
	}//while(dan<=9)
}//main

do - while文

while文は、ブロックの中のコードを実行するためには必ず1回は条件式がTRUEである必要がある。

しかし、とりあえずコードを1回実行して、そのあとそのコードを実行するかを決められる場合があると、while文では非効率なコードを組むか、他のコードを探すしかない。

その場合、do-while文を使うとwhile文のコードを1回実行して、そのあと反復をするかするまいかが決められる。

do-while文の形式は下記のようである。

do{

実行するコード

} while(条件式);

do-whileの作動方式はwhile文と同じである。条件式を確認して、条件式がTRUEであるとコードを実行し、実行したあとまた条件式を確認することを繰り返す。

ただし、do-while文は上記の方式の上に、とりあえず1回コードを実行することだけが異なる。

次は、とりあえず1回キーボードで入力をしてみて、プログラムを終了するキーでないと、続いて入力を反復するコードである。


public static void main(String[] args) {
		
	System.out.println("メッセージを入力してください。");
	System.out.println("「q」を押すと、プログラムを終了します。");

	Scanner sc = new Scanner(System.in);
	String inputString;

	do {
	System.out.print("メッセージを入力:");
	inputString = sc.nextLine();
	System.out.println("入力したメッセージ : " + inputString);
	} while(!inputString.equals("q")); 
	// 入力された文字列が「q」でないと、繰り返してブロックのコードを繰り返して実行

	System.out.println();
	System.out.println("「q」キーが入力され、プログラムを終了します。"); 
	// 「q」が入力されると、上のdo-while文が終わってこのコードが実行
}

以上で、反復文の1つの「while」, 「do - while」文をまとめてみた。
前書きや例文の途中で、ずっとループに落ちるなどの危険なところだけど言っていた気がするが、その「条件が当たるかぎり、無限にコードを実行する」ということはすごく有益に使える文法である。

反復が続くということは、つまり反復の回数が決まってない場合、何回でもコードを実行させることができることでもある。決まってない回数を反復するプログラムであると、安全に作られたwhile文を使うとよりやすくプログラミングができる。

次には、決まってある回数だけコードを実行する反復文をまとめるこのにする。

Discussion