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はややこしいので使わないほうがいい。