フロー制御
フロー制御では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文に対して有効です。

Back to top

Information