Java跳出多重循環


場景:很多的時候需要做到跳出多重循環,而在Java中雖然后goto關鍵字,但是是保留字,並沒有啟用。而在處理分支結構的if...else,switch...case,好像都達不到想要的效果。

作為終止當前代碼的return並不能完成業務需求,能用到的只有break,但是break只能跳出當前的循環。

代碼示例:break

        private static void testBreak() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.println("testBreak==j==" + j);
                if (j == 2)
                    break;
            }
            System.out.println("testBreak==i====>>>" + i);
        }
        System.out.println("testBreak======>>>END");
    }        

結果:

testBreak==j==0
testBreak==j==1
testBreak==j==2
testBreak==i====>>>0
testBreak==j==0
testBreak==j==1
testBreak==j==2
testBreak==i====>>>1
testBreak==j==0
testBreak==j==1
testBreak==j==2
testBreak==i====>>>2
testBreak======>>>END

結論:所有的執行到 j==2 的時候都會終止但是只能跳出當前循環。

 

解決方案一:繼續使用break,但是在添加一個flag作為判斷條件,每次判斷條件的時候都會判斷循環和flag.

代碼:

       private static void outloopByBreak() {
        boolean flag = true;
        for (int i = 0; i < 3 && flag; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.println("outloopByBreak==j==" + j);
                if (j == 2) {
                    flag = false;
                    break;
                }
            }
            System.out.println("outloopByBreak==i====>>>" + i);
        }
        System.out.println("outloopByBreak======>>>END");
    }    

結果:

outloopByBreak==j==0
outloopByBreak==j==1
outloopByBreak==j==2
outloopByBreak==i====>>>0
outloopByBreak======>>>END

結論:能解決跳出循環的問題,但是是會在內部循環的完成之后繼續往下執行,知道下次判斷才會跳出循環。

 

解決方案二:Java中break有一種用法可以做到類似goto的效果,在需要跳出的循環之前加一個標志之后break 標志;可以做到跳出循環(推薦使用)

代碼:

    private static void outloopByBreakLikeGoto() {
        flag: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.println("outloopByBreakLikeGoto==j==" + j);
                if (j == 2) break flag;
            }
            System.out.println("outloopByBreakLikeGoto==i====>>>" + i);
        }
        System.out.println("outloopByBreakLikeGoto======>>>END");
    }

結果:

outloopByBreakLikeGoto==j==0
outloopByBreakLikeGoto==j==1
outloopByBreakLikeGoto==j==2
outloopByBreakLikeGoto======>>>END

結論:做到了類似goto的效果

 

解決方案三:try...catch方式也能做到跳出多重循環的效果

代碼:

        private static void outloopByTryCatch() {
        try {
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 5; j++) {
                    System.out.println("outloopByTryCatch==j==" + j);
                    if (j == 2) 
                        throw new Exception();
                }
                System.out.println("outloopByTryCatch==i====>>>" + i);
            }
        } catch (Exception e) {
            System.out.println("====>>outloopByTryCatch跳出");
        }
        System.out.println("outloopByTryCatch======>>>END");
    }        

結果:

outloopByTryCatch==j==0
outloopByTryCatch==j==1
outloopByTryCatch==j==2
====>>outloopByTryCatch跳出
outloopByTryCatch======>>>END

結論:用拋異常的方式跳出,但是不推薦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM