第三天:流程控制語句

一.概述

在一個程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的孤紧。也就是說豺裆,程序的流程對運行結(jié)果有直接的影響。所以号显,我們必須清楚每條語句的執(zhí)行流程臭猜。而且,很多時候我們要通過控制語句的執(zhí)行順序來實現(xiàn)我們要完成的功能押蚤。

二.順序結(jié)構(gòu)

代碼:

public class ProcessControl{
    public static void main(String[] args){
        //順序執(zhí)行蔑歌,根據(jù)編寫的順序,從上到下運行
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
    }
}

運行結(jié)果:


image.png

二.判斷/選擇結(jié)構(gòu)

(一)判斷語句—if

1.基本格式
if(關(guān)系表達(dá)式){
  語句體;
}
2.執(zhí)行流程
  • 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
  • 如果是true就執(zhí)行語句體
  • 如果是false就不執(zhí)行語句體
Untitled Diagram.jpg

代碼:

public class ProcessControl{
    public static void main(String[] args){
        System.out.println("開始");
        // 定義兩個變量
        int a = 10;
        int b = 20;
        int c = 10;
        
        //變量使用if判斷
        if (a == b){
          System.out.println("a等于b");
        }
        if(a == c){
          System.out.println("a等于c");
        }
        System.out.println("結(jié)束");
    }
}

運行結(jié)果:


image.png

(二)判斷語句—if...else

1.基本格式
if(關(guān)系表達(dá)式) {
  語句體1;
}else {
  語句體2;
}
2.執(zhí)行流程
  • 首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
  • 如果是true就執(zhí)行語句體1
  • 如果是false就執(zhí)行語句體2
Untitled Diagram.jpg

代碼:

public class ProcessControl{
    public static void main(String[] args){
    // 判斷給定的數(shù)據(jù)是奇數(shù)還是偶數(shù)
    // 定義變量
    int a = 1;
    int b = 14;
    if(a % 2 == 0) {
        System.out.println("a是偶數(shù)");
    } else{
        System.out.println("a是奇數(shù)");
    }
    if(b % 2 == 0) {
        System.out.println("b是偶數(shù)");
    } else{
        System.out.println("b是奇數(shù)");
    }
    System.out.println("結(jié)束");
    }
}

運行結(jié)果:


image.png

(三)判斷語句—if..else if...else

1.基本格式
if (判斷條件1) {
  執(zhí)行語句1;
} else if (判斷條件2) {
  執(zhí)行語句2;
}
...
}else if (判斷條件n) {
  執(zhí)行語句n;
} else {
  執(zhí)行語句n+1;
}
2.執(zhí)行流程
  • 首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false
  • 如果是true就執(zhí)行語句體1
  • 如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false
  • 如果是true就執(zhí)行語句體2
  • 如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false
  • 如果沒有任何關(guān)系表達(dá)式為true揽碘,就執(zhí)行語句體n+1次屠。
image.png

代碼:

public class ProcessControl{
    public static void main(String[] args) {
    // x和y的關(guān)系滿足如下:
    // x>=3 y = 2x + 1;
    //‐1<=x<3 y = 2x;
    // x<=‐1 y = 2x – 1;
    // 根據(jù)給定的x的值,計算出y的值并輸出雳刺。
    // 定義變量
    int x = 2;
    int y;
    if (x >= 3) {
        y = 2 * x + 1;
    } else if(-1 <= x && x<3) {
        y = 2 * x;
    } else {
        y = 2 * x - 1;
    }
    System.out.println("y的值是:"+y);
    }
}

運行結(jié)果:

image.png
3.用if..else if...else實現(xiàn)判斷考試成績

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        int score = 120;
        if (score >= 90 && score <= 100) {
            System.out.println("優(yōu)秀");
        } else if (score >= 80 && score < 90) {
            System.out.println("好");
        } else if (score >= 70 && score < 80) {
            System.out.println("良");
        } else if (score >= 60 && score < 70) {
            System.out.println("及格");
        } else if (score >= 0 && score < 60) {
            System.out.println("不及格");
        } else {// 單獨處理邊界之外的不合理情況
            System.out.println("數(shù)據(jù)錯誤");
        }
    }
}

運行結(jié)果:

image.png
4.用if...else語句替換三元運算符

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        int a = 105;
        int b = 20;

        // 首先使用三元運算符
        // int max = a > b ? a : b;

        // 使用今天的if語句
        int max;
        if (a > b) {
            max = a;
        } else {
            max = b;
        }
        System.out.println("最大值:" + max);
    }
}

運行結(jié)果:

image.png

(四)選擇語句—switch

1.基本格式
switch(表達(dá)式) {
case 常量值1:
語句體1;
break;
case 常量值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
2.執(zhí)行流程
  • 首先計算出表達(dá)式的值
  • 其次劫灶,和case依次比較,一旦有對應(yīng)的值掖桦,就會執(zhí)行相應(yīng)的語句本昏,在執(zhí)行的過程中,遇到break就會結(jié)束枪汪。
  • 最后涌穆,如果所有的case都和表達(dá)式的值不匹配怔昨,就會執(zhí)行default語句體部分,然后程序結(jié)束掉宿稀。
image.png

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        System.out.println("今天星期幾?");
        // 定義變量趁舀,判斷是星期幾
        int weekday = 4;
        // switch語句實現(xiàn)選擇
        switch (weekday) {
            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;
        }
    }
}

運行結(jié)果:

image.png

注意事項:

  • 多個case后面的數(shù)值不可以重復(fù)。
  • switch后面小括號當(dāng)中只能是下列數(shù)據(jù)類型:
    基本數(shù)據(jù)類型: byte/short/char/int
    引用數(shù)據(jù)類型: String字符串祝沸、enum枚舉
  • switch語句格式可以很靈活:前后順序可以顛倒赫编,而且break語句還可以省略。(匹配哪一個case就從哪一個位置向下執(zhí)行奋隶,直到遇到了break或者整體結(jié)束為止擂送。)
3. case的穿透性

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        int i = 5;
        switch (i) {
            case 0:
                System.out.println("執(zhí)行case0");
                break;
            case 5:
                System.out.println("執(zhí)行case5");
            case 10:
                System.out.println("執(zhí)行case10");
            default:
                System.out.println("執(zhí)行default");
        }
    }
}

運行結(jié)果:

image.png

注意事項:

  • 上述程序中,執(zhí)行case5后唯欣,由于沒有break語句嘹吨,程序會一直向后走,不會在判斷case境氢,也不會理會break蟀拷,直接運行完整體switch。

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

(一)循環(huán)語句—for

1.基本格式
for(初始化表達(dá)式1; 布爾表達(dá)式2; 步進(jìn)表達(dá)式4){
循環(huán)體3
}
2.執(zhí)行流程

執(zhí)行順序:1234>234>234…2不滿足為止萍聊。

  1. 負(fù)責(zé)完成循環(huán)變量初始化
  2. 負(fù)責(zé)判斷是否滿足循環(huán)條件问芬,不滿足則跳出循環(huán)
  3. 具體執(zhí)行的語句
  4. 循環(huán)后,循環(huán)條件所涉及變量的變化情況
image.png

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        // 控制臺輸出10次HelloWorld寿桨,不使用循環(huán)
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("-------------------");

        // 用for循環(huán)改進(jìn)此衅,循環(huán)10次
        // 定義變量從0開始,循環(huán)條件為<10
        for (int i = 1; i <= 10; i++) {
            System.out.println("HelloWorld" + i);
        }
    }
}

運行結(jié)果:

image.png

(二)循環(huán)語句2—while

1.基本格式
  • 標(biāo)準(zhǔn)格式:
while(布爾表達(dá)式2){
循環(huán)體3
}
  • 拓展格式:
初始化表達(dá)式1
while(布爾表達(dá)式2){
循環(huán)體3
步進(jìn)表達(dá)式4
}
2.執(zhí)行流程
  • 標(biāo)準(zhǔn)格式:執(zhí)行順序:23>23>23…2不滿足為止亭螟。
  1. 負(fù)責(zé)判斷是否滿足循環(huán)條件挡鞍,不滿足則跳出循環(huán)
  2. 具體執(zhí)行的語句
  • 拓展格式:執(zhí)行順序:1234>234>234…2不滿足為止。
  1. 負(fù)責(zé)完成循環(huán)變量初始化
  2. 負(fù)責(zé)判斷是否滿足循環(huán)條件预烙,不滿足則跳出循環(huán)
  3. 具體執(zhí)行的語句
  4. 循環(huán)后墨微,循環(huán)條件所涉及變量的變化情況
image.png

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        // 控制臺輸出10次HelloWorld,使用while循環(huán)
        int i = 1;
        while (i <= 10) {
            System.out.println("HelloWorld" + i);
            i++;
        }
    }
}

運行結(jié)果:

image.png

(三)循環(huán)語句2—do...while

1.基本格式
  • 標(biāo)準(zhǔn)格式:
do{
循環(huán)體3
}while(布爾表達(dá)式2);
  • 拓展格式:
初始化表達(dá)式1
do{
循環(huán)體3
步進(jìn)表達(dá)式4
}while(布爾表達(dá)式2);

執(zhí)行流程

2.執(zhí)行流程
  • 標(biāo)準(zhǔn)格式:執(zhí)行順序:32>32>32…2不滿足為止扁掸。
  1. 負(fù)責(zé)判斷是否滿足循環(huán)條件翘县,不滿足則跳出循環(huán)
  2. 具體執(zhí)行的語句
  • 拓展格式:執(zhí)行順序:134>234>234…2不滿足為止。
  1. 負(fù)責(zé)完成循環(huán)變量初始化谴分。
  2. 負(fù)責(zé)判斷是否滿足循環(huán)條件锈麸,不滿足則跳出循環(huán)。
  3. 具體執(zhí)行的語句
  4. 循環(huán)后狸剃,循環(huán)變量的變化情況
image.png

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        // 控制臺輸出10次HelloWorld掐隐,使用do...while循環(huán)
        int i = 1;
        do {
            System.out.println("HelloWorld" + i);
            i++;
        } while (i <= 10);
    }
}

運行結(jié)果:

image.png

注意事項:

  • do...while循環(huán)的特點:無條件執(zhí)行一次循環(huán)體,即使我們將循環(huán)條件直接寫成false钞馁,也依然會循環(huán)一次虑省。

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        do {
            System.out.println("無條件執(zhí)行一次!");
        } while (false);
    }
}

運行結(jié)果:

image.png

for 和 while 的小區(qū)別:

  • 控制條件語句所控制的那個變量,在for循環(huán)結(jié)束后僧凰,就不能再被訪問到了探颈,而while循環(huán)結(jié)束還可以繼續(xù)使用,如果你想繼續(xù)使用训措,就用while伪节,否則推薦使用for。原因是for循環(huán)結(jié)束绩鸣,該變量就從內(nèi)存中消失怀大,能夠提高內(nèi)存的使用效率。
  • 在已知循環(huán)次數(shù)的時候使用推薦使用for呀闻,循環(huán)次數(shù)未知的時推薦使用while化借。

(四)跳出語句

1.break

使用場景:終止switch或者循環(huán)

  • 在選擇結(jié)構(gòu)switch語句中
  • 在循環(huán)語句中

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // 需求:打印完兩次HelloWorld之后結(jié)束循環(huán)
            if (i == 3) {
                break;
            }
            System.out.println("HelloWorld" + i);
        }
    }
}

運行結(jié)果:

image.png
2.continue

使用場景:結(jié)束本次循環(huán),繼續(xù)下一次的循環(huán)

  • 在循環(huán)語句中

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // 需求:不打印第三次HelloWorld
            if (i == 3) {
                continue;
            }
            System.out.println("HelloWorld" + i);
        }
    }
}

運行結(jié)果:

image.png

(五)死循環(huán)

死循環(huán):也就是循環(huán)中的條件永遠(yuǎn)為true捡多,死循環(huán)的是永不結(jié)束的循環(huán)蓖康。

1.死循環(huán)的標(biāo)準(zhǔn)格式
while(true){
循環(huán)體
}

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        while (true) {
            System.out.println("Hello!");
        }
    }
}

運行結(jié)果:

image.png
  • 死循環(huán)后邊不能有語句,否則編譯失敗

代碼:

public class ProcessControl {
    public static void main(String[] args) {
        while (true) {
            System.out.println("Hello!");
        }
        System.out.println("Hello!");
    }
}

運行結(jié)果:

image.png

(六)嵌套循環(huán)

所謂嵌套循環(huán),是指一個循環(huán)的循環(huán)體是另一個循環(huán)垒手。比如for循環(huán)里面還有一個for循環(huán)蒜焊,就是嵌套循環(huán)。
總共的循環(huán)次數(shù)=外循環(huán)次數(shù)*內(nèi)循環(huán)次數(shù)

1.嵌套循環(huán)格式:
for(初始化表達(dá)式1; 循環(huán)條件2; 步進(jìn)表達(dá)式7) {
for(初始化表達(dá)式3; 循環(huán)條件4; 步進(jìn)表達(dá)式6) {
執(zhí)行語句5;
}
}
2.執(zhí)行順序:
  • 123456>456...456>723456>456...456>723456
  • 外循環(huán)一次科贬,內(nèi)循環(huán)多次泳梆。
    代碼:
public class ProcessControl {
    public static void main(String[] args) {
        // 需求:使用嵌套循環(huán),打印5*8的矩形
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 8; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

運行結(jié)果:

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榜掌,一起剝皮案震驚了整個濱河市鸭丛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唐责,老刑警劉巖鳞溉,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熟菲,死亡現(xiàn)場離奇詭異,居然都是意外死亡呆贿,警方通過查閱死者的電腦和手機(jī)做入,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門壶运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒋情,“玉大人棵癣,你說我怎么就攤上這事狈谊∷⒑螅” “怎么了尝胆?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵含衔,是天一觀的道長。 經(jīng)常有香客問我缓呛,道長,這世上最難降的妖魔是什么票髓? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮裆操,結(jié)果婚禮上昆烁,老公的妹妹穿的比我還像新娘善玫。我一直安慰自己密强,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布或渤。 她就那樣靜靜地躺著奕扣,像睡著了一般薪鹦。 火紅的嫁衣襯著肌膚如雪惯豆。 梳的紋絲不亂的頭發(fā)上池磁,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音地熄,去河邊找鬼端考。 笑死揭厚,一個胖子當(dāng)著我的面吹牛裂明,可吹牛的內(nèi)容都是我干的太援。 我是一名探鬼主播粉寞,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼尼荆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唧垦?” 一聲冷哼從身側(cè)響起捅儒,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巧还,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭莽,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年麸祷,在試婚紗的時候發(fā)現(xiàn)自己被綠了澎怒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡阶牍,死狀恐怖喷面,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情走孽,我是刑警寧澤惧辈,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站磕瓷,受9級特大地震影響盒齿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜困食,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一边翁、第九天 我趴在偏房一處隱蔽的房頂上張望坏晦。 院中可真熱鬧脓豪,春花似錦、人聲如沸呼畸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仰剿,卻和暖如春创淡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背南吮。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工琳彩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人部凑。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓露乏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涂邀。 傳聞我的和親對象是個殘疾皇子瘟仿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容