【Java】continueの動き方!上には戻りません!!

Java

皆さんこんにちは。
Numataです。

continueは処理が上に戻ると思っている皆さんは必見です。
continueしたはずなのに処理は進んでいるという謎現象を解決いたします!

それではよろしくお願いいたします!

continueは一番内側の繰り返しの一番下の波カッコに移動します

はい、これが結論です。

この1文で理解できたあなたはもう満足でしょう。

しかし、今まで処理が上に戻ると思い込んでいた方は、
何を言っているんだこいつは。。

というような気持ちになっていると思います。

そもそもコンティニューって言っているんだから
やり直しだろう! 
と。

気持ちはわかります。
私も当初全く同じ解釈をしていました。

ですが間違った解釈をしていると、今後必ず躓く箇所が出てきます。

正しい解釈をしてcontinue文をマスターしましょう!

continueは処理を戻しません。飛ばします。

以下例文を用いて解説します。

この解答例は、出力の前に、2の倍数であればcontinueするという組み立てです。

この分の実行例はこのようになります。

偶数の時は出力処理だけ飛ばされている
状況だということが確認できると思います。

これはcontinue文の動きに原因があります。

numが偶数の場合、if文に入り、continueが実行されます。

その時、処理の移る先は、for文の終わりの ”}”ココです。
上に戻らず、下にジャンプするイメージです。

continue文は、処理は行いませんが1周としてカウントされます

下にジャンプすることが確認できました。

ではジャンプするとどのような処理になるでしょうか?

for文の最初の( ; ; )の中に存在する3つ目の式は”後処理”で行う式です。
for文内の処理が終わった後、必ず実行されます。

ジャンプした先は”}” ココでしたね。
ここはfor文の中の処理の一番最後の場所です。

となると、、

後処理である、i++ が実行されます

結果、10回中、奇数のみが出力される というプログラムになってしまっています。

以下のように解決しましょう!

continueする前に、i–しておくことで、continue後のi++を無効化でき、
無事10回出力されるようになりました!


continue文の動きはご理解いただけたでしょうか?

continueの名前の意味と、処理の動きが少し違うため、
最初は困惑しますが、慣れれば問題なく扱えるはずです!

continueは一番内側の繰り返しの一番下の波カッコに移動します

いかがだったでしょうか。

ちなみにこのcontinueはfor文が2重になっている場合、
continue文が記述してあるfor文の1番内側” に対して有効です。(breakも同様)

2重目のfor文の中に合ったら、2重目のfor文の”}”に処理がジャンプします。

最初とは全く違うイメージの動き方をすることが理解できたと思います。
これであなたもcontinueの使い手です。

continueをうまく使って、繰り返しをマスターしましょう!

コメント

タイトルとURLをコピーしました