for文制御
柔軟なループ制御
プログラムで重要な項目として「ループ制御」があります
一定の作業を効率よくするためにも、特定のステートメントを繰り返す制御は大切です
ループ制御はfor文以外にも存在しますが
C言語系プログラマはよくご存知のとおり、for文はその中でもっとも柔軟といわれます
for文は単一のステートメントを指定回数だけ繰り返すというものです(基本的に)
for (initialization ; expr ; step) statement;
まず、initializationで変数の初期化を行うのが普通です
ここで初期化された変数は、繰り返された回数を制御するために、つまりカウンターとして使われます
initializationはループ開始時に1度だけ実行されます
exprはif文同様に関係演算子を用いた式を評価します
ここで評価された結果が真(True)の場合のみステートメントがループされます
stepには通常カウンターとして用いている変数をインクリメントします
デクリメントするというケースもありますし、別な数で加算するというケースも考えられますが
通常はインクリメントを用います
exprとstepは繰り返されるごとに実行され
exprの評価が偽になったときにループを抜けます
statementには単体のステートメントかコードブロックを指定します
class test {
public static void main(String args[]) {
int count;
for (count = 1 ; count <= 10 ; count++)
System.out.println("count = " + count);
}
}
Java言語の場合はC++同様にforの変数の初期化部分で変数を宣言することもできます
上のプログラムはどちらかというとCプログラム風ですね☆
ただし、評価する式が最初から偽を返した場合は1度も実行されません
forの初期化部分は、C++同様に一時的変数の宣言も可能です
ここで宣言された変数は、ループを抜けると破棄されます
一時的に、forループで使用するカウンターとして利用することができます
class test {
public static void main(String args[]) {
for(int i = 0 ; i < 10 ; i++)
System.out.println("Kitty on your lap");
}
}
カウンター変数をfor分の初期化部分で宣言しています
ここで宣言された変数 i は、forループのステートメント(または、コードブロック内)でしか使用できません
空のfor文
for文を作成するときに、カウンタ変数の初期化や式の評価、インクリメントなどを行いました
しかし、これらは全て省略可能であることを知ってください
それこそがfor文がもっとも柔軟性に長けたループ制御ステートメントであるといわれる由縁なのです
for (;;) stametent;
この場合は、式がないので常に真を返します
つまり無限ループです
ループステートメントの中ではbreakステートメントというのが有効です
これは、現在のループを強制的に抜け出すことができます
こうすることで、本来 for( ; ; )で指定するべき内容をコードブロックの中でプログラマがカスタムに行うことができます
class test {
public static void main(String args[]) {
int count = 0;
for (;;) {
System.out.print("count = " + count + "\r");
count++;
if (count > 9999) break;
}
System.out.println("ループを抜け出しました");
}
}
おやぁ、普段printlnメソッドだった部分がprintになっていますね
これはprintlnメソッドとほとんど同じなのですが、自動改行しません
for文で指定されているコードブロックでは、現在のcount変数の値を出力して
count変数に1加算してifで評価します
もしcoutn変数が9999以上であればbreakステートメントでループを抜けます
このように、forステートメントは( ) 内の好きな部分を省略することができます
必要に応じて独自のバリエーションで記述することができるのです
for ([initialization] ; [expr] ; [step]) statement;
ループ制御します
exprが真の間、statementを実行します
一度繰り返されることにexprとstepが評価されます
initialization - 省略可能です。カウンター変数を初期化します
expr - 省略可能です。評価する式を指定します。省略した場合は真を返します
step - 省略可能です。繰り返されることに実行されます。通常はカウンタ変数をインクリメントかデクリメントします