繰り返し処理 (for)
今回は繰り返し処理の1つである「for文」についてみていきます。
「for文」は条件が真の間だけ与えられた文の実行を繰り返します。
基本構文
for(初期化;継続条件;ループごとの終了処理) { 繰り返し処理 }
この条件文は次のような手順で実行されます。 ※wikipedia引用
- 初期化を実行する。
- 条件を評価する。条件が偽ならば、ループを終了する。
- 繰り返し処理を実行する。
- 「ループごとの終了処理」を実行する。
- 条件の評価に戻る(1.に戻る)。
forは条件を満たした場合のみ繰り返し処理を実行します。
ですので最初から条件を満たさない場合は1回も処理は実行されません。
初期化処理はfor文の最初の一回のみ行なわれます。
「ループごとの終了処理」は各ループごとに行なわれます。
サンプル
public class sample01 {
public static void main(String[] args) {
for(int count = 1 ; count < 10 ; count++){
System.out.print(count);
}
}
}
初期化処理は「int count = 1」になります。
ループの開始に1回だけ変数countをint型で定義し「1」を代入しています。
継続条件は「count < 10」になります。変数countが10未満の間繰り返します。
各ループの終わりごとに「count++」が処理され変数countが増加していきます。
break
public class sample01 {
public static void main(String[] args) {
for(int count = 1 ; true ; count++){
if(count < 10){
System.out.print(count);
}else{
break;
}
}
}
}
for文で、条件を満たしている間に強制的に繰り返し処理から抜けるには「break文」を使います。サンプルは継続条件を 「true」 としました。つまり永遠に条件を満たし続ける無限ループです。繰り返し処理ではif文により変数countが10未満かどうか判定しています。ifの条件式に満たさない場合は7行目でbreak文が処理され繰り返し処理から抜けます。
for文はループ数が決まっている場合によく利用され、このように無限ループにしてbreak文で抜ける方法はwhile文でよく利用されます。
continue
public class sample01 {
public static void main(String[] args) {
for(int count = 1 ; count < 10 ; count++){
if(count == 5){
continue;
}
System.out.print(count);
}
}
}
break文はそこで繰り返し処理を終了しfor文から抜けました。continue文も処理は終了するのですがfor文から抜けるのではなく次の繰り返し処理に移ります。
サンプルでは変数countが5のとき5行目でcontinue文が実行されています。処理自体は終了されて7行目は処理されません。しかしfor文から抜けるのではなく次の繰り返し処理に移るので3行目の処理に移ります。結果として7行目が処理されない「5」だけが表示されていません。
注意しないといけないのはcontinue文で繰り返し処理が途中で終わっても、ループが終わるごとにする処理である「count++」は実行されます。
「初期化、継続条件、ループごとの終了処理」の省略
public class sample01 {
public static void main(String[] args) {
int count = 1;
for(;;){
if(count < 10){
System.out.print(count);
count++;
}else{
break;
}
}
}
}
「初期化、継続条件、ループごとの終了処理」は省略できますが、区切りである「 ; 」がないとエラーになります。継続条件の省略は無限ループになります。
その他
public class sample01 {
public static void main(String[] args) {
for(int i = 1 , j = 100; i < 5 ; i++ , j++){
System.out.print(" " + i);
System.out.print(" " + j);
}
}
}
「初期化、ループごとの終了処理」はカンマで区切ることにより複数の文を書くことができます。
初期化で 「 int i = 1 , int j = 100 」と各変数ごとに型定義するとエラーになりました。
複数の文が書けますが、いろいろ制約はありそうです。

