Japanese / English
フロー制御
フロー制御では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
Information
社長ブログ


運営サイト




広告



Google Search
PV
SEO対策 大阪  税理士 相談  税理士 守口市  税理士 大阪市  税理士 枚方市  自動車ガラス 神戸  シール印刷 神戸  ブリリアントアパートメント  株式会社CONFRAGE  英会話 個人レッスン 京都市右京区  京都市右京区西京区でマンツーマン英会話 
このページはCONFRAGEの著作物です。このページを複製・転載することを禁じます。CopyRight(C)2003-2016 CONFRAGE All rights reserved.