<!--親の顔より見た光景-->

日々の発見を残していきます。

do whileの厄介さ

javaのdo while文の厄介な動作の話。
以下のコードの出力はどうなるか?

【Main.java

public class Main{
    public static void main(String[] args)
    {
        int num = 0;
        do {
            switch ( num ) {
                case 0:
                    System.out.print( "0" );
                    num++;
                    break;
                case 1:
                    System.out.print( "1" );
                    num++;
                    break;
                default:
                    System.out.print( "2" );
                    num++;
                    continue;
            }
        } while ( num < 5 );
    }
}

無限ループすると思ったが、出力は

01222

となる。

条件文のチェックがどこで行われているか知りたいので、以下のコードにすると

【Main2.java

public class Main2{
    public static void main(String[] args)
    {
        int num = 0;
        do {
            System.out.println( "start: " + num );
            switch ( num ) {
                case 0:
                    System.out.println( "0" );
                    num++;
                    break;
                case 1:
                    System.out.println( "1" );
                    num++;
                    break;
                default:
                    System.out.println( "2" );
                    num++;
                    continue;
            }
            System.out.println( "end" );
        } while ( num < 5 );
    }
}

出力はこうなる。

start: 0
0
end
start: 1
1
end
start: 2
2
start: 3
2
start: 4
2

num = 4のとき、continue; → System.out.println( "start: " + num );へ移動するはずだが、
どこで条件チェックが行われているか知らないがcontinueしないでループを抜けている。

do whileはややこしいので使わないほうがいい。