繰り返しとは、、
繰り返しとは [ ある変数の値が 10になるまで ] とか、データベースから値をすべて取得するまでと言った条件が満たされるまで繰返して処理を行う事です。
例えば数値を 1から 10まで表示させたいとします。もっとも単純な方法は 1から 10まで 10回表示させる命令を書く事ですが、これではあまりにも無駄が多すぎます。 10個程度ならまだましですが 100回や 1000回になってしまったら手におえません。 しかしこんな場合に繰り返し命令を使用するととても簡単な記述で済ませる事が可能になります。
繰り返し for ステートメント
for文は回数指定で処理する場合に多く使用されます。
Javaの繰り返し命令は次に説明する while文や do文もありますが、for文は最も柔軟といわれます。
for( initialization ; expr ; step ) {
// 繰り返し行われる処理
}
| 項目 |
動作 |
| initialization |
繰り返しが始まる前に一度だけ実行されます。ここで変数の初期化といった繰り返しを始める準備を行うのが一般的です。 |
| expr |
繰り返しを終了する条件です。ここに書いてある条件が満たされている間は繰り返し処理が行われることになり、ここに書いてある条件が満たされなくなった時点で繰り返し処理が終了します。 |
| step |
繰り返し処理が一回終了するごとにここの処理が実行されます。ここでは終了条件になるために変数をカウントしたりする処理を記述します。 |
|
[ 1〜10まで繰り返し表示する ]
for(int i=1;i<=10;i++){
System.out.println( i ) ;
}
この例ではカウンタに使用している変数 [ i ] の値を初期値 [ 1 ] に設定します。この初期化ブロックは、 繰返しが開始される時に 1回だけ処理されます。
終了条件は変数 [ i ] が [ 10 ] 以下となっています。 なのでこの forループは、変数 [ i ] が [ 10 ] 以下の間にこの処理ブロックを繰り返し実行します。
カウンタとして使用されている 変数 [ i ] は増分値として [ i++ ] が指定されています。これは一回処理ブロックを通る度に [ i ] が [ +1 ] されるという意味です。もし 2ずつ増やしたい場合は、この部分を [ i+=2 ] とします。
繰り返し while ステートメント
whileは条件で指定されている式が 真の間 { } で囲まれた処理ブロックを繰り返し実行します。この時条件の判定は処理ブロックが実行される前に行われます。
[ 表記法 ]
while ( expr ) {
// 繰り返し行われる処理
}
| 項目 |
動作 |
| expr |
繰り返しを終了する条件です。真偽値のみ記述可能です。 |
|
[ フローチャート ]

[ 1〜100まで繰り返し表示する ]
int i = 0 ;
while(100 > i++){
System.out.println( i );
}
繰り返し do ステートメント
上までの繰り返しでは先ず 「 条件を調べる 」 → 「 処理を実行する 」 という手順になるので、条件によっては一度も処理が実行されないときもあります。「 どんな条件でも一度は処理を実行したい 」「 何回処理が行われるか分からない 」こんな場合に、条件を比較するタイミングを後に行う 後判定の繰り返しを使用するときがあります。
[ 表記法 ]
do {
// 繰り返し行われる処理
} while ( expr );
| 項目 |
動作 |
| expr |
繰り返しを終了する条件です。真偽値のみ記述可能です。 |
|
[ フローチャート ]

[ 1〜100まで繰り返し表示する ]
int i = 1 ;
do {
System.out.println( i );
i++;
} while( i <= 100 );
break / continue を使った繰り返し制御
break
多岐分岐命令 ( switch ) でも使用しましたが、break は繰り返しの途中でその繰り返しを強制的に抜ける命令です。switch命令の時も breakによってその処理ブロックを終了することによって以後の命令を実行しないように制御していましたが、繰り返しでも同様の事を行えます。
[ サンプル ]
int i = 0;
while (true) {
System.out.println(i);
if ( i == 1 ) { break ; }
i++;
}
終了条件に真となる値を指定しているので、何もしなければこの繰り返しは永久ループなります。 しかし上記では i の値が 1 となった段階で breakによってこの while を抜ける事が出来ます。
continue
残りのコードをスキップして判断文に制御を移します。 break 命令が残りのコードをスキップして、さらにループ自体も抜けるのに対して、continue 命令は残りの処理ブロックはスキップしますがループ自体は抜けず、条件によってはまた繰り返しの処理ブロックが実行されます。
[ サンプル ]
for( int i=1; i<=10; i++ ){
if((i%2) == 0) continue;
System.out.println( i ) ;
}
上記では i を 2で割った余りが 0 であれば continueを実行します。 2で割った余りが 0 ということは偶数になりますので、偶数の際は以降のステートメントは実行せず、繰り返し条件の制御文に処理が移ります。
ネストする繰り返し
繰り返し命令の {} で囲まれているところに繰り返し行われる処理を記述する。と説明してきましたが、これは処理ということなので 繰り返しの中にさらに繰り返し処理を記述することも可能です。
[ 三角を作成する ]
for(int i = 0; i < 10; i++){
for(int c = 0; c < i; c++){
System.out.print("*");
}
System.out.print("\n");
}
[ 実行結果 ]
*
**
***
****
*****
******
*******
********
*********
サンプルソースを見てみると一つ目の for文の中に入っている for文は一つ目の for文に比べて字下げされています。 これは インデントと呼びソースを見やすくするための書き方で、これなら for文の中にもうひとつ for文が記述されているというのが一目瞭然です。当然インデントしなくても処理自体は正常に動きますがソースの見易さとメンテナンスのし易さを考えて通常はこのような書き方をします。
|