フロー制御ではforループや多重ループなどの問題が出力されています。
以下の例を見てください。
class TEST{
public static void main(String[] args){
for(int i=6,j=2;i<10 || j>0;j++){
j++;
if(j>i){
System.out.println(i + ":" + j);
break;
}
}
}
}
上記サンプルは普通のfor文とはちょっと違い、初期値でiとjの二つの変数を初期化しています。
このような書き方はできますが、
int i=0,int j=0 というような記述方法はコンパイルエラーとなります。
条件式も一つの条件だけでなく、&&や||を使用して複数の条件を指定することが出来ます。
普通はこのような複雑なコーディングはしないと思いますが知っておく必要があります。
また、コンパイルエラーとなる問題も出力されます。
典型的なものとして
if(i=0) があります。条件式の中はbooleanが返ってくる式を指定しなくてはいけません。
i=0は「iに0を代入します」という代入式になります。
よって「iが0の場合」という構文は
if(i==0) と書かなくてはいけません。
その他に特別な記述として無限ループがあります。
以下は全て無限ループの記述方法です。
for(;;)
while(true)
但し、
while() や、C言語のように
while(1) という記述はJavaではエラーとなりますので注意してください。
多重ループの問題ではcontinue、breakを理解することが重要です。
以下の例を見てください。
class TEST{
public static void main(String[] args){
for(int i=0;i<10;i++){
for(;;){
break;
}
if(i!=10){
continue;
}else{
System.out.println("a");
}
}
}
}
上記サンプルはfor文の中にfor分が入っている問題です。これを多重ループとかネスト(入れ子)と言ったりします。
中にあるfor文は無限ループですが、break文がありますので、すぐにfor文を抜け出します。
この時、現在ループしているfor文を一つ抜けるだけですので、その次のif文に移動します。決して全てのfor文の外に抜けるのではないので注意してください。これはcontinueもbreakも同じです。
if文では、iが10でない場合はcontinueしますのでfor文の先頭に戻ります。
よってi=10の場合だけ標準出力でaと表示されます・・というような問題に見えますが実は引っ掛け問題で、forの条件式はi<となっているため標準出力の部分は一度も通ることはありません。
もし、
if(i!=9) であれば一度だけaと標準出力されます。
フロー制御ではこのような引っ掛けが多いです。
補足:continue文とbreak文は、for文、while文、switch文に対して有効です。