for分
決まった回数だけ処理を繰り返し実行したいときに使用する。
for (最初の処理; 条件式; 命令文の実行後に行う処理) {
// 条件式がtrueのときに繰り返す命令文
}
for(int i = O; i < 5; i++) {
System.out.println("こんにちは");
}
まず「最初の処理」が実行される。(最初の処理は文字通り最初の一回しか処理されない)
次に「条件式」が評価される。条件式の値がtrue である限り、ブロック内の命令文は繰り返し実行される。
ブロック内の命令文が実行されると、今度は「命令文の実行後に行う処理」が実行される。
そして、再度「条件式」が評価される(「最初の処理」はもう実行されない)。
もし「条件式」がfalse になったら、この時点でfor 文の実行は終了。
true のままであれば、for 文の実行は続く。
例文だと変数iが5 になるまで"こんにちは"が出力され続ける。
拡張for文
配列やコレクションといった複数の要素を持っているものからすべての要素に含まれる値を順番に取り出して処理するために使われる。
for文との違いはfor文は指定した条件で繰り返し処理を実行する場合に使用され、繰り返す処理の内容を指定することができるのに対し、 拡張for文はコレクションの全要素に対して繰り返し処理を実行する場合に使用される。
for (型 変数名: 配列あるいはArrayListの変数名){
取り出した要素を使用して行う処理
}
この記述を行うと、以下のように動作する。
① 配列、あるいはArrayListから要素を1つ取り出す
② 取り出した要素を変数に代入する
③ {}内の処理を行う
④ 配列、あるいはArrayListの要素数分だけ処理を繰り返す
上記のコードは変数scoresから要素を取り出し、ing型の変数scoreに代入するという動作になっている。
for(int score : scores) {
System.out.println(score);
}
while分
while文は、与えられた条件を満たしている場合に処理を繰り返す。
for文は繰り返しの回数が決まっている場合に、一方while文は繰り返しの回数が決まっておらず、条件を満たしている限り処理を繰り返したい場合によく用いられる。(回数を指定せずに実行すると無限に処理される)
while(条件式){
命令文
}
まず「条件式」が評価され、これがtrueであれば{}に囲まれたブロック内の命令文が実行される。
その後、再び「条件式」が評価される。この繰り返し処理は、「条件式」を評価した結果がfalseになった時点で終わる。
int i = 0;
while( i < 5 ) {
System.out.println("こんにちは");
i++;
}
例文1だと変数iが5 になるまで"こんにちは"が出力され続ける。
int i = 5;
while( i > 0 ) {
System.out.println(i);
i--;
}
例文2だとwhile文より前で変数iを5で初期化してる。
続いてwhile文により「変数iが0より大きい」という条件を満たす間は、それに続くブロック内の処理を繰り返す。この処理は「変数iの値を出力し、その後でiの値を1減らす」というもので、これにより、変数iの値は5から1ずつ減り(5から1までカウントダウンする)、0になった時点でi > 0 という条件式がfalse になるのでループを抜ける。
do 〜 while文
while文は条件を満たしているかを判断するタイミングが処理の実行前となるため、条件を満たさずに1度も実行されないことがあるが、do while文は条件を満たしているかどうかを処理の実行後に判断するため、最低でも1度は処理が実行されるという違いがある。
条件式が true の場合は命令文を繰り返し、 false の場合は do〜while ループを抜ける。
do{
実行する処理
} while(条件式)
int i = 0;
do {
System.out.println("こんにちは");
i++;
} while(i < 5);
例文だと変数iが5 になるまで"こんにちは"が出力され続ける。
「break」でループ処理を中断
break文はfor文やwhile文などのループ処理を中断して、途中で抜けるときに使用する。
for (式) {
if (条件式) {
命令文;
break;
}
}
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum += i;
System.out.println("変数sumに" + i + "を加えました。sumは" + sum);
if(sum > 20) {
System.out.println("合計が20を超えました");
break;
}
}
for文には、変数iが1から10までの間ループを繰り返すように記述されている。
「break」を記述することで、変数sumの合計値が20を超えた時点でforループすることが出来る。
「continue」でループ内の処理をスキップする
繰り返し処理を途中で中断するbreak文に対し、continue文はループそのものを中断するのではなく、continue以降の処理をスキップし、次の回に移る。
ある条件のときだけ、ループ内の処理をしたくないという時に「continue」を使う。
for (式) {
if (条件式) {
continue;
}
命令文;
}
int sum = 0;
for(int i = 1; i <= 10; i++) {
if(i % 2 == 0) {
continue;
}
sum += i;
System.out.println("変数sumに" + i +"を加えました。sumは" + sum);
}
例文は1から10 までの整数のうち、奇数だけを足していく処理。
if(i % 2 == 0)がtrue の場合には、 contine; によって、変数 sum に変数i の値を加える処理がスキップされる。
% は剰余を求める演算子だから、 i % 2 は変数 i を 2 で割った余りを表す。
変数 i の値が 2 で割り切れる(偶数である)場合には、以降の
sum += i;
System.out.println("変数sumに" + i + "を加えました。sumは" + sum);
がスキップされ次の繰り返し処理に移る。
for 文では変数 i が 1 から 10 までの間ループを繰り返すように記述されているが、 i が偶数の場合には、この変数 sum に i の値を加算する処理がスキップされる。