入れ子からの脱出(Java)
Java では予約語として定義はされているのですが goto は使えません。例えば以下のようなコードがあった場合 C だとこうします
for(;exp1;exp2){ for(;exp3;exp4){ for(;exp5;exp6){ st; /* st は文 */ if(exp6 == x) goto f1; } } } f1:
コレが出来ないんで、for の入れ子はどう処理しようかと思うとこう??けっこテキトー。
for(;exp1 && exp6 != x;exp2){ for(;exp3 && exp6 != x;exp4){ for(;exp5;exp6){ st; if(exp6 == x) break; } } }
でも exp6!=x の辺りがクドイのでフラグを立てます
boolean flg = true; for(;exp1 && flg;exp2){ for(;exp3 && flg;exp4){ for(;exp5;exp6){ st; if(exp6 == x) flg == false; break; } } }
はっきし言って更にクドくなったし 3 番目の for 文を上手く脱出出来たとしても、2 番目の for 文で処理に変更が加わったなどの理由で条件も変更の必要があった場合
if(!flg) break;
という判断文を入れないといけない。こういう処理の流れにあった事が無かったので
break 3;
とかやったら 3 回ループから break 出来るんじゃね?とか思ってた。調べた所、goto 文は確かに無いのだが、ラベルはある(そりゃそうだ) で、break にラベルを貼って移動出来るそうな。
for(;exp1;exp2){ for(;exp3;exp4){ for(;exp5;exp6){ st; if(exp6 == x) break flg1; } } } flg1:
ていうか goto 予約されてんなら使えるようにしてくれりゃいーのに。