繰り返しと制御文の組み合わせ
- whileによる繰り返し
- forによる繰り返し
- 制御文の組み合わせ
- 繰り返しの制御
whileによる繰り返し
while文は条件式を1つもち、条件がtrueの間繰り返す
while(条件式){
繰り返す処理;
}
条件式の例
while(a != 20){} // aが20と等しくない間
while(a >= 5 && a <= 30){} // aが5以上30以下の間
while(a > 0){} // aが0より大きい間
while(a >= 0) // aが0以上の間(0も含む)
条件式によって実行される回数や出力されるタイミングが異なってくる
do-while文
do{
繰り返す処理;
}while(条件式);
最初にdoをつけることでブロック内の処理が必ず1度は行われる(条件判定の前に処理があるため)
また、whileのあとに;をつける点がwhileとちがう
do-whileもwhileも繰り返す処理が1文だけの場合、ブロック{}を省略できる
forによる繰り返し
Javaでは基本のfor文と拡張for文が用意されている
for文
for(初期化式; 条件式; 更新式){
繰り返す処理;
}
- 初期化式 = for文内で使う変数の初期化
i = 0などint i = 0, j = 0のように複数記述もできる。(変数宣言と同様に型は複数記述できない) - 条件式 = 結果がboolean型となる式で繰り返しの条件を書く
i < 5など(varも使える) - 更新式 = 初期化式で宣言した変数の値の増減
i++など
条件式の結果がtrueの間処理が繰り返される。
また、↑の式は省略できるが、セミコロンは省略できないfor(; i > 5; i++)などと書く
拡張for文
配列やコレクションなどの全要素に対して、最初から順番に処理を行う場合に使用する(foreach的な?)
for(要素型の変数宣言 : 式){
繰り返す処理;
}
- 要素型の変数宣言 = 式の要素を受け取るための変数
- 式 = 配列やIterableインターフェースを実装したクラス(コレクションフレームワーク)
制御文の組み合わせ
以前までに使用してきた制御文は組み合わせて使用できる
制御文のネストと変数のスコープ
繰り返し文や条件分岐はネストして使用することができる。
その際に変数が使用できる範囲は宣言したブロック内に限られる。
繰り返し文のネスト
繰り返し文をネストした構造を多重ループという。
繰り返しの制御
無限ループ
無限ループは意図的に起こせる
while(true){} //条件式にtrue
for(;;){} // セミコロンのみ記述
// while(false){} はコンパイルエラー
無限ループは処理の中でif文などを使ってループを抜ける
break文
switchではcaseを抜けるのに使った。
繰り返し文の中で使うと、繰り返し処理を中断してループを抜けたあとの処理を行う。
continue文
continueは繰り返し文を抜けるのではなく、実行中の残りの繰り返し処理のみスキップする。
(continueすると処理が繰り返し文の最初に戻る)
ラベルによる制御
ラベル名:でラベルを設定できる。
breakやcontinueともにラベルを設定できる
continue ラベル= ラベルの範囲の後続処理をスキップするbreak ラベル= ラベルの配下の繰り返しを抜ける