Java 流程控制

1 選擇結(jié)構(gòu)if

1.1 if語(yǔ)句

??在Java中,if語(yǔ)句的具體語(yǔ)法格式如下:

if (條件語(yǔ)句){ 
    執(zhí)行語(yǔ)句;
    ……
}

??上述格式中,判斷條件是一個(gè)布爾值,當(dāng)判斷條件為true時(shí),{}中的執(zhí)行語(yǔ)句才會(huì)執(zhí)行。if語(yǔ)句的執(zhí)行流程如下圖所示。

??接下來(lái)通過一段代碼,學(xué)習(xí)一下if語(yǔ)句的具體用法

public class HelloWorld{
    public static void main(String[] args){
        int x = 5;
        if (x < 10){
            x++;
        }
        System.out.println("x="+x);
    }
}

??在上述代碼中,定義了一個(gè)變量x,其初始值為5。在if語(yǔ)句的判斷條件中判斷x的值是否小于10,很明顯條件成立,{}中的語(yǔ)句會(huì)被執(zhí)行,變量x的值將進(jìn)行自增。從運(yùn)行結(jié)果可以看出,x的值已由原來(lái)的5變成了6。

1.2 if…else語(yǔ)句

??if…else語(yǔ)句是指如果滿足某種條件,就進(jìn)行某種處理,否則就進(jìn)行另一種處理。例如,要判斷一個(gè)正整數(shù)的奇偶,如果該數(shù)字能被2整除則是一個(gè)偶數(shù),否則該數(shù)字就是一個(gè)奇數(shù)。if…else語(yǔ)句具體語(yǔ)法格式如下:

if (判斷條件){
    執(zhí)行語(yǔ)句1
    ……
}else{
    執(zhí)行語(yǔ)句2
    ……
}

??上述格式中,判斷條件是一個(gè)布爾值。當(dāng)判斷條件為true時(shí),if后面{}中的執(zhí)行語(yǔ)句1會(huì)執(zhí)行。當(dāng)判斷條件為false時(shí),else后面{}中的執(zhí)行語(yǔ)句2會(huì)執(zhí)行。if…else語(yǔ)句的執(zhí)行流程如下圖所示。

??接下來(lái)通過一段代碼,來(lái)實(shí)現(xiàn)判斷奇偶數(shù)的程序

public class HelloWorld{
    public static void main(String[] args){
        int num = 19;
        if (num%2 == 0){
            //判斷條件成立
            System.out.println("num是一個(gè)偶數(shù)");
        }else{
            System.out.println("num是一個(gè)奇數(shù)");
        }
    }
}

??上述代碼中,變量num的值為19,模以2的結(jié)果為1,不等于0,判斷條件不成立。因此會(huì)執(zhí)行else后面{}中的語(yǔ)句,打印“num是一個(gè)奇數(shù)”。

1.3 if…else if…else語(yǔ)句

??if…else if…else語(yǔ)句用于對(duì)多個(gè)條件進(jìn)行判斷,進(jìn)行多種不同的處理。例如,對(duì)一個(gè)學(xué)生的考試成績(jī)進(jìn)行等級(jí)的劃分,如果分?jǐn)?shù)大于80分等級(jí)為優(yōu),否則,如果分?jǐn)?shù)大于70分等級(jí)為良,否則,如果分?jǐn)?shù)大于60分等級(jí)為中,否則,等級(jí)為差。if…else if…else語(yǔ)句具體語(yǔ)法格式如下:

if (判斷條件1) {
    執(zhí)行語(yǔ)句1
} else if (判斷條件2) {
    執(zhí)行語(yǔ)句2
}
...
else if (判斷條件n) {
    執(zhí)行語(yǔ)句n
} else {
    執(zhí)行語(yǔ)句n+1
}

??上述格式中,判斷條件是一個(gè)布爾值。當(dāng)判斷條件1為true時(shí),if后面{}中的執(zhí)行語(yǔ)句1會(huì)執(zhí)行。當(dāng)判斷條件1為false時(shí),會(huì)繼續(xù)執(zhí)行判斷條件2,如果為true則執(zhí)行語(yǔ)句2,以此類推,如果所有的判斷條件都為false,則意味著所有條件均未滿足,else后面{}中的執(zhí)行語(yǔ)句n+1會(huì)執(zhí)行。if…else if…else語(yǔ)句的執(zhí)行流程如下圖所示。

??接下來(lái)通過一段代碼,來(lái)實(shí)現(xiàn)對(duì)學(xué)生考試成績(jī)進(jìn)行等級(jí)劃分的程序

public class HelloWorld{
    public static void main(String[] args){
        int grade = 75; //定義學(xué)生成績(jī)
        if (grade > 80) {
            //滿足條件 grade > 80
            System.out.println("該成績(jī)等級(jí)為優(yōu)");
        }else if (grade > 70){
            //滿足條件 grade > 70
            System.out.println("該成績(jī)等級(jí)為良");
        }else if (grade > 60){
            //滿足條件 grade > 60
            System.out.println("該成績(jī)等級(jí)為中");
        }
        else{
            //以上都不滿足
            System.out.println("該成績(jī)等級(jí)為差");
        }
        
    }
}


??上述代碼中,定義了學(xué)生成績(jī)grade為75。它不滿足第一個(gè)判斷條件grade>80,會(huì)執(zhí)行第二個(gè)判斷條件grade>70,條件成立,因此會(huì)打印“該成績(jī)的等級(jí)為良”。

1.4 選擇結(jié)構(gòu)if語(yǔ)句與三元運(yùn)算轉(zhuǎn)換

??三元運(yùn)算符,它和if-else語(yǔ)句類似,語(yǔ)法如下:

判斷條件 ? 表達(dá)式1 : 表達(dá)式2

??三元運(yùn)算符會(huì)得到一個(gè)結(jié)果,通常用于對(duì)某個(gè)變量進(jìn)行賦值,當(dāng)判斷條件成立時(shí),運(yùn)算結(jié)果為表達(dá)式1的值,否則結(jié)果為表達(dá)式2的值。例如求兩個(gè)數(shù)x、y中的較大者,如果用if…else語(yǔ)句來(lái)實(shí)現(xiàn),具體代碼如下:

public class HelloWorld{
    public static void main(String[] args){
        int x = 0;
        int y = 1;
        int max;
        if (x>y){
            max = x;
        }else{
            max =y;
        }
        System.out.println(max);
    }
}

??上面的代碼運(yùn)行之后,變量max的值為1。上述代碼可以使用三元運(yùn)算符代替

int max = x > y ? x : y;

2 循環(huán)結(jié)構(gòu)

2.1 循環(huán)語(yǔ)句while

??while循環(huán)語(yǔ)句和選擇結(jié)構(gòu)if語(yǔ)句有些相似,都是根據(jù)條件判斷來(lái)決定是否執(zhí)行大括號(hào)內(nèi)的執(zhí)行語(yǔ)句。區(qū)別在于,while語(yǔ)句會(huì)反復(fù)地進(jìn)行條件判斷,只要條件成立,{}內(nèi)的執(zhí)行語(yǔ)句就會(huì)執(zhí)行,直到條件不成立,while循環(huán)結(jié)束。while循環(huán)語(yǔ)句的語(yǔ)法結(jié)構(gòu)如下:

while(循環(huán)條件){
    執(zhí)行語(yǔ)句
    ………
}

??在上面的語(yǔ)法結(jié)構(gòu)中,{}中的執(zhí)行語(yǔ)句被稱作循環(huán)體,循環(huán)體是否執(zhí)行取決于循環(huán)條件。當(dāng)循環(huán)條件為true時(shí),循環(huán)體就會(huì)執(zhí)行。循環(huán)體執(zhí)行完畢時(shí)會(huì)繼續(xù)判斷循環(huán)條件,如條件仍為true則會(huì)繼續(xù)執(zhí)行,直到循環(huán)條件為false時(shí),整個(gè)循環(huán)過程才會(huì)結(jié)束。
??while循環(huán)的執(zhí)行流程如下圖所示。

??接下來(lái)通過一段代碼,來(lái)實(shí)現(xiàn)打印1~4之間的自然數(shù)

public class HelloWorld{
    public static void main(String[] args){
        int x = 1;    //定義變量x,初始值為1
        while (x <= 4){   //循環(huán)條件
            System.out.println("x="+x);  //條件成立,打印x的值
            x++;    //x進(jìn)行自增
        }
    }
}

??在上述代碼中,x初始值為1,在滿足循環(huán)條件x <= 4的情況下,循環(huán)體會(huì)重復(fù)執(zhí)行,打印x的值并讓x進(jìn)行自增。因此打印結(jié)果中x的值分別為1、2、3、4。
??大家要注意的是,代碼x++用于在每次循環(huán)時(shí)改變變量x的值,從而達(dá)到最終改變循環(huán)條件的目的。如果沒有這行代碼,整個(gè)循環(huán)會(huì)進(jìn)入無(wú)限循環(huán)的狀態(tài),永遠(yuǎn)不會(huì)結(jié)束。

2.2 循環(huán)語(yǔ)句for

??for循環(huán)語(yǔ)句是最常用的循環(huán)語(yǔ)句,一般用在循環(huán)次數(shù)已知的情況下。for循環(huán)語(yǔ)句的語(yǔ)法格式如下:

for(初始化表達(dá)式; 循環(huán)條件; 操作表達(dá)式){
    執(zhí)行語(yǔ)句
    ………
}

??在上面的語(yǔ)法結(jié)構(gòu)中,for關(guān)鍵字后面()中包括了三部分內(nèi)容:初始化表達(dá)式、循環(huán)條件和操作表達(dá)式,它們之間用“;”分隔,{}中的執(zhí)行語(yǔ)句為循環(huán)體。
??接下來(lái)分別用1表示初始化表達(dá)式、2表示循環(huán)條件、3表示操作表達(dá)式、4表示循環(huán)體,通過序號(hào)來(lái)具體分析for循環(huán)的執(zhí)行流程。具體如下:

for(1 ; 2 ; 3){
    4
}
第一步,執(zhí)行1
第二步,執(zhí)行2,如果判斷結(jié)果為true,執(zhí)行第三步,如果判斷結(jié)果為false,執(zhí)行第五步
第三步,執(zhí)行4
第四步,執(zhí)行3,然后重復(fù)執(zhí)行第二步
第五步,退出循環(huán)

??接下來(lái)通過一個(gè)案例對(duì)自然數(shù)1~4進(jìn)行求和

public class HelloWorld{
    public static void main(String[] args){
        int sum = 0;    //定義變量sum,用于記錄累加的和
        for (int i = 1;i <= 4;i++){  //i的值會(huì)在1~4之間變化
            sum += i; //實(shí)現(xiàn)i值的累加
        }
        System.out.println(sum);
    }
}

??上述代碼中,變量i的初始值為1,在判斷條件i<=4為true的情況下,會(huì)執(zhí)行循環(huán)體sum+=i,執(zhí)行完畢后,會(huì)執(zhí)行操作表達(dá)式i++,i的值變?yōu)?,然后繼續(xù)進(jìn)行條件判斷,開始下一次循環(huán),直到i=5時(shí),條件i<=4為false,結(jié)束循環(huán),執(zhí)行for循環(huán)后面的代碼,打印“sum=10”。

2.3 循環(huán)語(yǔ)句do…while

do…while循環(huán)語(yǔ)句和while循環(huán)語(yǔ)句功能類似,其語(yǔ)法結(jié)構(gòu)如下:

do {
    執(zhí)行語(yǔ)句
    ………
} while(循環(huán)條件);

??在上面的語(yǔ)法結(jié)構(gòu)中,關(guān)鍵字do后面{}中的執(zhí)行語(yǔ)句是循環(huán)體。do…while循環(huán)語(yǔ)句將循環(huán)條件放在了循環(huán)體的后面。這也就意味著,循環(huán)體會(huì)無(wú)條件執(zhí)行一次,然后再根據(jù)循環(huán)條件來(lái)決定是否繼續(xù)執(zhí)行。
do…while循環(huán)的執(zhí)行流程如下圖所示。

??接下來(lái)使用do…while循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)打印1~4之間的自然數(shù)

public class HelloWorld{
    public static void main(String[] args){
        int x = 1;  //定義變量x,初始值為1
        do{
            System.out.println("x="+x);  //打印x的值
            x++;  //x的值自增
        } while(x <= 4);   //循環(huán)條件
    }
}

2.4 循環(huán)嵌套

??嵌套循環(huán)是指在一個(gè)循環(huán)語(yǔ)句的循環(huán)體中再定義一個(gè)循環(huán)語(yǔ)句的語(yǔ)法結(jié)構(gòu)。while、do…while、for循環(huán)語(yǔ)句都可以進(jìn)行嵌套,并且它們之間也可以互相嵌套,如最常見的在for循環(huán)中嵌套for循環(huán),格式如下:

for(初始化表達(dá)式; 循環(huán)條件; 操作表達(dá)式) {
    ………
    for(初始化表達(dá)式; 循環(huán)條件; 操作表達(dá)式) {
        執(zhí)行語(yǔ)句
        ………
    }
    ………
}

接下來(lái)通過一個(gè)練習(xí),來(lái)實(shí)現(xiàn)使用“*”打印直角三角形

public class HelloWorld{
    public static void main(String[] args){
        int i,j;    //定義兩個(gè)循環(huán)變量
        for (i=1;i <= 9;i++){   //外層循環(huán)
            for (j=1;j <= i;j++){   //內(nèi)層循環(huán)
                System.out.print("*");   //打印*
            }
            System.out.print("\n");   //換行
        }
    }
}

運(yùn)行結(jié)果如下所示


??在上述代碼中定義了兩層for循環(huán),分別為外層循環(huán)和內(nèi)層循環(huán),外層循環(huán)用于控制打印的行數(shù),內(nèi)層循環(huán)用于打印“”,每一行的“”個(gè)數(shù)逐行增加,最后輸出一個(gè)直角三角形。

2.5 跳轉(zhuǎn)語(yǔ)句(break、continue)

??跳轉(zhuǎn)語(yǔ)句用于實(shí)現(xiàn)循環(huán)執(zhí)行過程中程序流程的跳轉(zhuǎn),在Java中的跳轉(zhuǎn)語(yǔ)句有break語(yǔ)句和continue語(yǔ)句。
1、break語(yǔ)句
??在switch條件語(yǔ)句和循環(huán)語(yǔ)句中都可以使用break語(yǔ)句。當(dāng)它出現(xiàn)在switch條件語(yǔ)句中時(shí),作用是終止某個(gè)case并跳出switch結(jié)構(gòu)。當(dāng)它出現(xiàn)在循環(huán)語(yǔ)句中,作用是跳出循環(huán)語(yǔ)句,執(zhí)行后面的代碼。

public class HelloWorld{
    public static void main(String[] args){
        int x = 1;  //定義變量x,初始值為1
        while (x <= 4){    //循環(huán)條件
            System.out.println("x="+x);    //條件成立,打印x的值
            if (x == 3){
                break;
            }
            x++;   //x進(jìn)行自增
        }
    }
}

運(yùn)行結(jié)果


在上述帶代碼中,通過while循環(huán)打印x的值,當(dāng)x的值為3時(shí)使用break語(yǔ)句跳出循環(huán)。因此打印結(jié)果中并沒有出現(xiàn)“x=4”。
2、標(biāo)記
??當(dāng)break語(yǔ)句出現(xiàn)在嵌套循環(huán)中的內(nèi)層循環(huán)時(shí),它只能跳出內(nèi)層循環(huán),如果想使用break語(yǔ)句跳出外層循環(huán)則需要對(duì)外層循環(huán)添加標(biāo)記。如下所示,只能打印4行“*”。

public class HelloWorld{
    public static void main(String[] args){
        int i,j;  //定義兩個(gè)循環(huán)變量
        itcase: for (i=1;i <= 9;i++){
            for (j=1;j <=i;j++){
                if (i > 4){
                    break itcase;
                }
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}


3、continue語(yǔ)句
??continue語(yǔ)句用在循環(huán)語(yǔ)句中,它的作用是終止本次循環(huán),執(zhí)行下一次循環(huán)。接下來(lái)通過一個(gè)練習(xí)對(duì)1~100之內(nèi)的奇數(shù)求和

public class HelloWorld{
    public static void main(String[] args){
        int sum = 0;
        for (int i = 1;i <= 100;i++){
            if (i%2 == 0){   //判定i為偶數(shù)
                continue;   //結(jié)束本次循環(huán)
            }
            sum += i;    //計(jì)算累計(jì)和
        }
        System.out.println("sum = "+sum);
    }
}


??上述代碼中,使用for循環(huán)讓變量i的值在1100之間循環(huán),在循環(huán)過程中,當(dāng)i的值為偶數(shù)時(shí),將執(zhí)行continue語(yǔ)句結(jié)束本次循環(huán),進(jìn)入下一次循環(huán)。當(dāng)i的值為奇數(shù)時(shí),sum和i進(jìn)行累加,最終得到1100之間所有奇數(shù)的和,打印“sum = 2500”。
??在嵌套循環(huán)語(yǔ)句中,continue語(yǔ)句后面也可以通過使用標(biāo)記的方式結(jié)束本次外層循環(huán),用法與break語(yǔ)句相似,在此不再舉例說(shuō)明。

3 流程控制語(yǔ)句(switch)

??switch 條件語(yǔ)句也是一種很常用的選擇語(yǔ)句,它和if條件語(yǔ)句不同,它只能針對(duì)某個(gè)表達(dá)式的值作出判斷,從而決定程序執(zhí)行哪一段代碼。例如,在程序中使用數(shù)字1~7來(lái)表示星期一到星期天,如果想根據(jù)某個(gè)輸入的數(shù)字來(lái)輸出對(duì)應(yīng)中文格式的星期值,可以通過下面的一段偽代碼來(lái)描述:

用于表示星期的數(shù)字
    如果等于1,則輸出星期一
    如果等于2,則輸出星期二
    如果等于3,則輸出星期三
    如果等于4,則輸出星期四
    如果等于5,則輸出星期五
    如果等于6,則輸出星期六
    如果等于7,則輸出星期天

??對(duì)于上面一段偽代碼的描述,大家可能會(huì)立刻想到用剛學(xué)過得if…else if…else語(yǔ)句來(lái)實(shí)現(xiàn),但是由于判斷條件比較多,實(shí)現(xiàn)起來(lái)代碼過長(zhǎng),不便于閱讀。Java中提供了一種switch語(yǔ)句來(lái)實(shí)現(xiàn)這種需求,在switch語(yǔ)句中使用switch關(guān)鍵字來(lái)描述一個(gè)表達(dá)式,使用case關(guān)鍵字來(lái)描述和表達(dá)式結(jié)果比較的目標(biāo)值,當(dāng)表達(dá)式的值和某個(gè)目標(biāo)值匹配時(shí),會(huì)執(zhí)行對(duì)應(yīng)case下的語(yǔ)句。具體實(shí)現(xiàn)代碼如下:

switch (表達(dá)式){
    case 目標(biāo)值1:
        執(zhí)行語(yǔ)句1
        break;
    case 目標(biāo)值2:
        執(zhí)行語(yǔ)句2
        break;
    ......
    case 目標(biāo)值n:
        執(zhí)行語(yǔ)句n
        break;
    default:
        執(zhí)行語(yǔ)句n+1
        break;
}

??在上面的格式中,switch語(yǔ)句將表達(dá)式的值與每個(gè)case中的目標(biāo)值進(jìn)行匹配,如果找到了匹配的值,會(huì)執(zhí)行對(duì)應(yīng)case后的語(yǔ)句,如果沒找到任何匹配的值,就會(huì)執(zhí)行default后的語(yǔ)句。switch語(yǔ)句中的break關(guān)鍵字將在后面的做具體介紹,此處,我們只需要知道break的作用是跳出switch語(yǔ)句即可。

3.1 選擇結(jié)構(gòu)switch練習(xí)

??接下來(lái)通過一個(gè)案例演示根據(jù)數(shù)字來(lái)輸出中文格式的星期

public class HelloWorld{
    public static void main(String[] args){
        int week = 5;
        switch (week){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("輸入的數(shù)字不正確...");
                break;

        }
    }
}

運(yùn)行結(jié)果如圖所示



??在使用switch語(yǔ)句的過程中,如果多個(gè)case條件后面的執(zhí)行語(yǔ)句是一樣的,則該執(zhí)行語(yǔ)句只需書寫一次即可,這是一種簡(jiǎn)寫的方式。例如,要判斷一周中的某一天是否為工作日,同樣使用數(shù)字1~7來(lái)表示星期一到星期天,當(dāng)輸入的數(shù)字為1、2、3、4、5時(shí)就視為工作日,否則就視為休息日。接下來(lái)通過一個(gè)案例來(lái)實(shí)現(xiàn)上面描述的情況

public class HelloWorld{
    public static void main(String[] args){
        int week = 2;
        switch (week){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("輸入的數(shù)字不正確...");
                break;

        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 順序語(yǔ)句 語(yǔ)句:使用分號(hào)分隔的代碼稱作為一個(gè)語(yǔ)句。 注意:沒有寫任何代碼只是一個(gè)分號(hào)的時(shí)候,也是一條語(yǔ)句,...
    哈哈哎呦喂閱讀 473評(píng)論 0 0
  • 2.流程化控制 1.順序結(jié)構(gòu) 2.選擇結(jié)構(gòu) 加入其中有一個(gè)是true,則執(zhí)行對(duì)應(yīng)的java序列,然后整個(gè)if語(yǔ)句結(jié)...
    Joypang閱讀 298評(píng)論 0 0
  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 2,075評(píng)論 0 2
  • 《Java從小白到大?!芳堎|(zhì)版已經(jīng)上架了?。?! 程序設(shè)計(jì)中的控制語(yǔ)句有三種,即順序、分支和循環(huán)語(yǔ)句。Java程序通...
    tony關(guān)東升閱讀 494評(píng)論 0 1
  • 如果有來(lái)生,請(qǐng)讓我不留余地再愛他一次。
    巴巴米拉閱讀 85評(píng)論 0 0

友情鏈接更多精彩內(nèi)容