はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。
環境
言語:Java11、JDK13.0.2
動作環境:Windows10
入れ子
マトリョーシカ人形を見たことがあるだろうか。サイズが違う相似の物体をたくさん重ねたものだ。ここで扱う入れ子は制御構造のネスト(入れ子)である。
if
for
while
の文が。処理の中にまた制御構造を内包する状態になっており、二重ループ・三重ループなど階層的な処理を行うのに向いている。
break
break
自体はswitch
文のときに触れたが、入れ子の後で説明するなら「今処理しているネスト(入れ子)を中断し、上位のループに入る」動きになる。仮に無限ループに入っていたとしても、break文の条件を満たせば抜けることが出来る。
以下、参考の黒本からの引用
breakの使用例int num = 0; while(true){ num++; if(num == 3){ break; } System.out.println(num); }
continue
continue
はbreak
とよく間違えるのだが、continue
した場合はcontinue
以下の繰り返し処理を丸ごとスキップして更新文に移行する。
continueの実例は後日追記。思いついたコードがどれもコンパイルエラーでうまくいかなかった。特に練習が必要だ。
実践
失敗例を見てみよう。
class nestingTwo
{
public static void main(String[] args)
{
int forLoop = 0;
int whileLoop = 0;
//合計回数は9回のはず
for(; forLoop < 3; forLoop++){
while(whileLoop < 3){
whileLoop++;
}
}
System.out.println("処理は終了しました。");
System.out.println("最終結果は、for文が" + forLoop + "回、While文が" + whileLoop + "回でした。");
}
}
/* 処理は終了しました。
最終結果は、for文が3回、While文が3回、合計で3回、でした。 */
whileLoop
はforの入れ子内で一度3になった後は条件を満たしており、forが一度回っただけでそれ以降の変更がなされていない。
forの回数×whileの回数 にするため、今回はこうした。
(省略)
int totalCounter = 0;
//合計回数は9回のはず
int whileLoopTemporary =0;
for(; forLoop < 3; forLoop++){
while(whileLoop < 3){
whileLoop++;
totalCounter++;
whileLoopTemporary = whileLoop;
}
whileLoop = 0;
}
System.out.println("処理は終了しました。");
System.out.println("最終結果は、for文が" + forLoop + "回、While文が" + whileLoopTemporary + "回、合計で" + totalCounter + "回、でした。");
}
}
while内でたまった回転数を逃がすwhileLoopTemporary
を作り代入し、後からfor文内で0
に初期化している。
もっとスマートな方法があるはず。
終わりに
ラベルという、ラベルを張った処理へ制御を移す機構もあるようだが、ここでは割愛。どこかで見たgo to
と同じものだろうか。
参考
出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。