二重ループを抜けるやりかたにも色々ありますけどね。。
同僚の人の話。
まあ、普通はラベル付きのbreakを使ってこんな感じ。
public class DoubleLoop1 { public static void main(String[] args) { out_of_loop: for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { System.out.println("i = " + i + ", j = " + j); if(i % 3 == 0 && j % 3 == 0) { break out_of_loop; } } } } }
が、同僚の人はフラグを使ったやりかた
public class DoubleLoop2 { public static void main(String[] args) { boolean doubleLoopBreakFlag = false; for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { System.out.println("i = " + i + ", j = " + j); if(i % 3 == 0 && j % 3 == 0) { doubleLoopBreakFlag = true; break; } } if(doubleLoopBreakFlag) { break; } } } }
や、例外を使ったやりかた
public class DoubleLoop3 { public static void main(String[] args) { try { for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { System.out.println("i = " + i + ", j = " + j); if(i % 3 == 0 && j % 3 == 0) { throw new DoubleLoopBreakException(); } } } } catch(DoubleLoopBreakException e) { } } private static class DoubleLoopBreakException extends Exception { } }
で、いままでやってきたらしい。
なんで?って聞いたら、goto絶対ダメ派なんだそうな。
ラベル付きbreakはgotoじゃないと思うけど、なかなか納得してくれんかったなあ。