Java中的break和contiune

跳轉語句


 

直接上代碼:

    /**
     * 跳轉指令
     */
    public static void GoTo(){
        for (int j = 0; j < 10 ; j++) {        //1
            for (int i = 0; i<10;i++){         //2
                if (i>5) {
                    System.out.println(j+" "+ i);
                    continue;
                }
                System.out.println("contine沒有跳出"); //3
            }
        }
    }
  • continue:表示跳出本次循環,即所在層循環中,continue之後的代碼(3)不再執行。繼續執行2 層的下一次循環
  • 但是,該語句可以通過 “參數”指定跳轉位置,改變跳轉的方向。如下:
    /**
     * 跳轉指令
     */
    public static void GoTo(){
        outer:for (int j = 0; j < 10 ; j++) {  //1
            for (int i = 0; i<10;i++){         //2
                if (i>5) {
                    System.out.println(j+" "+ i);
                    continue outer;
                }
            }
        }
    }
    public static void GoTo(){
        for (int j = 0; j < 10 ; j++) {    //1
            for (int i = 0; i<10;i++){     //2
                if (i>5) {
                    System.out.println(j+" "+ i);
                    break;
                }
            }
        }
    }
  • 以上代碼通過 指定了continue的跳轉位置,所以在此處相當於break
  • break 是跳出所在層循環,即第2層 ,繼續執行第 1層的下一次循環。

 

  • 通過該方法可以跳出多重循環:
/**
 * 跳轉指令
 */
public static void GoTo(){

    outer:for (int j = 0; j < 10 ; j++) {
        for (int i = 0; i < 10; i++) {
            for (int px = 1; px < 10; px++) {
                if (i > 5) {
                    System.out.println(j + " " + i);
                    continue outer;
                }
            }
        }
    }
}

直接跳到最外層循環。

continue 與break的巧妙應用

/**
 * 計算1000 以內10個最大質數和
 */
public static void Sum(){
    int sum =0,i = 0;
    outer:for(int j = 1000;j>2;j--){
        for(int x = 2;x<j/2;x++){
            if(j%x == 0){
                continue outer;
            }
        }

        i++;
        sum += j;

        if(i<10){
            //1 - 9 9個數
            System.out.print(j + "+");
        }else{
            //第 10 個數
            System.out.println(j +"="+sum);
            break;
        }
    }
}

分析:1. 當 j 不是質數時,會執行到continue -> outer:,跳出判斷質數的循環,回到最外層繼續繼續尋找下一個質數。

           2. 如果換成break之後,發生錯誤。前後對比:

  
 
切換成break後,break(第一個)跳出內層for循環,繼續執行 i++... ,相當於內層for循環沒起作用。

第二個break是,在找到 10 個質數後,跳出最外層循環,不再尋找下一個質數。
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章