🙄

ITスクールの授業7日目のまとめ3:反復を中断するコード(break / continue)

2023/08/10に公開1

前書き

反復文は、ユーザーが決めた回数ほど反復をするか、ユーザーが決めた条件を満足するまでコードを繰り返して実行する。

しかし、反復を途中に中断する必要がある場合もあるはずである。たとえば、反復文についてまとめたとき、ループに落ちてしまうとき、ループを抜け出る必要があった。または、反復の途中、目標を達成したのなら、その以後のコード実行は意味がなくて、反復をすぐに終了したいときなどがある。

もしくは、今の反復の結果を無視して、次の反復に飛ばしたいときもあるはずである。たとえば、ランダムの数字を出したが、その数が要らないか条件に合わない場合、今回の反復を終了して次の反復に飛ばしたいことがある。

今回はそのとき使える、反復を中断するコードについてまとめる。


break文

break文は、break文が実行されたところから一番近いブロックの反復文をすぐ終了する。

下記のコードのなかで使われた「break;」文が終了するブロックを見てみよう。

Dice6End.java

while(true) { // break;文はここのブロックの反復文をすぐ終了する。
			count++;
			num = (int)(Math.random() * 6) + 1;
			if(num == 6) {break;} // 1~6になる数字のなかで、6が出るとbreak文を実行。
	    }

もう1度、条件を満足してループの途中に反復文を抜け出る例文を見よう。

Over100End.java
int result = 3;
	int threesMulSum = 0;

	while(true) {//break;文はここのブロックの反復文をすぐ終了する。
		threesMulSum += result;
		
		if(threesMulSum > 100){
			System.out.println(threesMulSum);
			break; //
		}
		
		result += 3;
	}
	
	System.out.printf("3から%dまでの 3の倍数を足すと、100を超えます。", result);

2重以上の反復文のなかで、内部の反復文で「break;」を使うと内部の反復文だけを中断する。外側の反復分まで一緒に終了したいのなら、breakの後ろにあるキーワードを書いて、外側のfor文の前に「キーワード:」と書くと、外側の反復文まで終了できる。下記の例文を見よう。

//外側は大文字、内側は小文字を出力するfor文。
//外側のfor文の前に、「Outter:」(単語は構いません。Outterでなくてもいいです)を付けたことに注目。
//このコードを実行すると、内部のfor文でbreak;を実行しても、外側まですぐ終わる。
//(大文字のところが「A」である反復ですぐ終わる。)
	Outter: for(char upper = 'A'; upper <= 'Z'; upper++){
		for(char lower = 'a'; lower <= 'z'; lower++) {
			System.out.printf("%s - %s\n", upper, lower);
				if(lower == 'g') {
				System.out.println("lowerが「g」であるとき、外側のfor文まで終了します。);
				break Outter; // breakの後に、キーワードを付ける。
				}
		}
	}
	

continue文

continue文は反復文で使えて、現在の反復だけを終了して、すつ次の反復を実行する。
詳しい実行は下記のようになる。

分かりやすくまとめると、現在の反復だけを終了して(ブロックの反復文を終了することと違います。)すぐ次の反復を実行すると理解できればいいと思う。

下記は1づつ数字を増加して、奇数である場合はcontinue文を使って出力を飛して偶数だけを出力する例文である。

OnlyEvenPrint.java
		for(int i = 0; i <= 10; i++) {

			if(i % 2 != 0) { // 奇数であるとき
			continue; // 現在の反復を飛ばして、下の出力文を実行させない。
			}

			System.out.println("i : " + i);
		}

次々と、2と3の倍数でない数字だけを、continue文を通じて倍数は飛ばして出力する例文である。

Notmultiple.java
	for(int i =1 ; i <= 20; i++) {
	if(i % 2 == 0 || i % 3 == 0) { // 2もしくは3の倍数であるとき
	continue; // 現在の反復を終了して、下の出力文は実行せず飛ばす。
	}

	System.out.print(i + " ");
			
}//for(int i =1 ; i <= 20; i++)

以上で、反復文の途中に反復文全体を、もしくは現在の反復だけを中断するコードについてまとめた。より幅広い活用ができる反復文を、またもう1度活用できるようにしてくれるcontinue, break文をりかいすると、もっといろんな機能の反復文が作れる。

Discussion