break、continue、return中選擇一個,我們結束掉它

北漂程式設計師發表於2022-05-23

  在平時的開發過程中,經常會用到迴圈,在寫迴圈的過程中會有很多判斷條件及邏輯,你知道如何結束一個迴圈嗎?在java中有break、continue、reture三個關鍵字都可以結束迴圈,我們看下他們的區別。

一、break

1.1、單層迴圈

我們先看下在只有一層迴圈的情況下,break是怎麼起作用的,

package com.my.day02;

import java.util.ArrayList;
import java.util.List;

/**
 * 測試break
 * @date 2022/5/23 21:13
 */
public class TestBreak {
    public static void main(String[] args) {
        endCycle();
    }

    /**
     * 單層迴圈
     */
    static void endCycle(){

        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        for(String str:list){
            if(str.equals("3")){
                break;
            }
            System.out.println("單層:"+str);
        }
    }
}

結果如下,

單層:1
單層:2

Process finished with exit code 0

在單層迴圈中,break結束的是整個迴圈,後續的不再執行;

1.2、多層迴圈

看下單層迴圈和多層迴圈有區別嗎,

package com.my.day02;

import java.util.ArrayList;
import java.util.List;

/**
 * 測試break
 * @date 2022/5/23 21:13
 */
public class TestBreak {
    public static void main(String[] args) {
        endMultiCycle();
    }

    /**
     * 多層迴圈
     */
    static void endMultiCycle(){

        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        List<String> innerList=new ArrayList<String>();
        innerList.add("A");
        innerList.add("B");
        innerList.add("C");
        for(String str:list){
            for(String innerStr:innerList){
                if(innerStr.equals("B")){
                    break;
                }
                System.out.println("外層:"+str+",內層:"+innerStr);
            }

        }
    }
}

我們來看下多層迴圈會是什麼結果那,

外層:1,內層:A
外層:2,內層:A
外層:3,內層:A
外層:4,內層:A

Process finished with exit code 0

可以看到內層迴圈僅執行了一次。由此,在多層迴圈下,break結束的是本層迴圈。 

對於,break這個關鍵字,結束的是本層迴圈,滿足break條件後的迴圈不會執行。

二、continue

2.1、單層迴圈

先看下在單層迴圈下,continue是如何工作的,

package com.my.day02;

import java.util.ArrayList;
import java.util.List;

/**
 * 測試continue
 * @date 2022/5/23 21:17
 */
public class TestContinue {
    public static void main(String[] args) {
        endCycle();
    }
    static void endCycle(){

        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        for(String str:list){
            if(str.equals("3")){
                continue;
            }
            System.out.println(str);
        }
    }
}

執行結果如下,

1
2
4

Process finished with exit code 0

沒用列印”3“,由此得出結論,continue在單層迴圈下,結束的是該迴圈中的本次迴圈,後面的迴圈會繼續執行。在多次迴圈下吶?

2.2、多層迴圈

在多層迴圈下,

package com.my.day02;

import java.util.ArrayList;
import java.util.List;

/**
 * 測試continue
 * @date 2022/5/23 21:17
 */
public class TestContinue {
    public static void main(String[] args) {
        endMultiCycle();
    }
    /**
     * 多層迴圈-continue
     */
    static void endMultiCycle(){

        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        List<String> innerList=new ArrayList<String>();
        innerList.add("A");
        innerList.add("B");
        innerList.add("C");
        for(String str:list){
            for(String innerStr:innerList){
                if(innerStr.equals("B")){
                    continue;
                }
                System.out.println("外層:"+str+",內層:"+innerStr);
            }
        }
    }
}

執行結果是下面這樣的,

外層:1,內層:A
外層:1,內層:C
外層:2,內層:A
外層:2,內層:C
外層:3,內層:A
外層:3,內層:C
外層:4,內層:A
外層:4,內層:C

Process finished with exit code 0

可以看到外層迴圈正常,內層迴圈只有"B"未列印。由此,在多層迴圈下,continue結束的是本層迴圈中的本次迴圈。 

三、return

小夥伴們肯定知道return代表方法的返回,那麼用在迴圈中它是怎麼起作用的吶,

3.1、單層迴圈

package com.my.day02;

import java.util.ArrayList;
import java.util.List;

/**
 * 測試return
 * @date 2022/5/23 21:40
 */
public class TestReturn {
    public static void main(String[] args) {
        endCycle();
    }
    /**
     * 單層迴圈
     */
    static void endCycle(){

        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        for(String str:list){
            if(str.equals("3")){
                return;
            }
            System.out.println("單層:"+str);
        }
        System.out.println("方法結束");
    }
}

執行結果,

單層:1
單層:2
Process finished with exit code 0

可以看到”方法結束“和”“3”後面的迴圈都未列印。在單層迴圈中,return會結束整個方法。

3.2、多層迴圈

package com.my.day02;

import java.util.ArrayList;
import java.util.List;

/**
 * 測試return
 * @date 2022/5/23 21:40
 */
public class TestReturn {
    public static void main(String[] args) {
        endMultiCycle();
    }
    /**
     * 多層迴圈
     */
    static void endMultiCycle(){

        List<String> list=new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        List<String> innerList=new ArrayList<String>();
        innerList.add("A");
        innerList.add("B");
        innerList.add("C");
        for(String str:list){
            for(String innerStr:innerList){
                if(innerStr.equals("B")){
                    return;
                }
                System.out.println("外層:"+str+",內層:"+innerStr);
            }

        }
    }
}

 結果如下,

外層:1,內層:A
Process finished with exit code 0

從上面的結果可以知道,在外層迴圈的第一次迴圈時,內層迴圈到“B”就會執行“return”,這時沒再執行後面的。多層迴圈中,return結束的是整個方法的執行。

四、總結

  今天在寫程式時用到了多層迴圈,想結束內層迴圈,突然對如何結束迴圈有點把握不準,為此有了本文。

 1、break用在結束本層迴圈,後面的迴圈不會繼續執行;

  2、continue用在結束本層迴圈中的本次迴圈,後面的迴圈會跳過本次迴圈繼續執行,直到本層迴圈結束;

  3、return結束的是整個方法;

 

 

相關文章