流程控制——選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)

流程控制——選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)

  • 在Java中有3種流程控制結(jié)構(gòu):順序結(jié)構(gòu)料饥、選擇結(jié)構(gòu)恋沃、循環(huán)結(jié)構(gòu)望几。
  • 順序結(jié)構(gòu):順序結(jié)構(gòu)是指程序從上向下依次執(zhí)行每條語句結(jié)構(gòu)邓夕,中間沒有任何的判斷和跳轉(zhuǎn)蛀缝。
  • 選擇結(jié)構(gòu):選擇結(jié)構(gòu)是根據(jù)條件判斷的結(jié)果來選擇執(zhí)行不同的代碼顷链。選擇結(jié)構(gòu)可以細(xì)分為單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)内斯。Java通過if控制語句蕴潦、switch語句來實(shí)現(xiàn)選擇結(jié)構(gòu)。
  • 循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)是根據(jù)判斷條件來重復(fù)性地執(zhí)行某段代碼俘闯。Java提供了while語句潭苞、do-while語句、for語句來實(shí)現(xiàn)循環(huán)結(jié)構(gòu)真朗。
  1. if控制語句:if控制語句共有3種不同的形式此疹,分別是單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)
  • (1) 使用if語句實(shí)現(xiàn)單分支處理
  • if語句的語法格式如下遮婶。
  • if(表達(dá)式一定返回true或false){語句分支語句塊}
  • if是Java關(guān)鍵字
  • 表達(dá)式是爾類型的表達(dá)式蝗碎,其結(jié)果為true或false
  • 當(dāng)表達(dá)式返回true時(shí),會(huì)執(zhí)行分支語句塊旗扑,然后在執(zhí)行后續(xù)的程序代碼
  • 當(dāng)條件表達(dá)式返回false時(shí)蹦骑,會(huì)跳過分支語句塊,直接執(zhí)行后續(xù)程序代碼臀防。
    注意如果分支語句塊中只包含一條語句眠菇,則可以省略花括號(hào)“{}”但禁止這樣書寫程序(循環(huán)也有同樣特點(diǎn))
  • 注意以下代碼的問題
if(w=="晴")
;
System.out.println("爬山");//此語句已經(jīng)不是分支結(jié)構(gòu)的一部分了
  • (2)if-else分支結(jié)構(gòu)
  • 條件成立袱衷,執(zhí)行if塊中的語句捎废,否則,執(zhí)行else塊中的語句
  • if與else語句塊是互斥的
  • else子句不能單獨(dú)使用致燥,它必須是if語句的一部分登疗,與最近的if語句配對(duì)使用。
if(w=="晴"){
System.out.println("爬山");
}else{
System.out.println("看書")辐益;
}System.out.println("睡覺")断傲;
  • (3)if-else if-else分支結(jié)構(gòu)
  • 每一個(gè)分支語句塊都是互斥的
if(w=="晴"){
System.out.println("爬山");
}else if(w=="雨"){
System.out.println("看書")
}else if(w=="雪"){
System.out.println("打雪仗");
}else{
System.out.println("發(fā)呆")
}System.out.println("睡覺")

2.switch語句

  • switch語句只能進(jìn)行相等性判定(switch后的變量與case后的值進(jìn)行)
  • case關(guān)鍵字后的值必須與switch后的變量屬于同一類型(或可自動(dòng)轉(zhuǎn)變?yōu)榇祟愋偷念愋?
  • 在同一個(gè)switch語句塊中智政,各case關(guān)鍵字后面的值不能重復(fù)
  • switch后的變量是相等判斷的關(guān)鍵因素艳悔。此變量必須是:byte、short女仰、int、char或它們的包裝類對(duì)象抡锈。附:Java5 后可以使用枚舉對(duì)象疾忍。 Java7 后可使用String
  • switch語句塊中有1到多個(gè)case塊,用于判斷變量等于什么值時(shí)來執(zhí)行的邏輯
  • switch語句塊中有0到1個(gè)default塊床三,其中定義著所有case都不成立時(shí)應(yīng)執(zhí)行的邏輯
  • 每個(gè)case塊的最后一條語句通常應(yīng)該使用break結(jié)束一罩,但某些情況下,也可以不寫
  • 如果不以break語句結(jié)束case塊撇簿,則會(huì)從第一個(gè)滿足條件的case開始執(zhí)行后續(xù)所有的case塊中的程序邏輯聂渊,直到遇到break或switch塊結(jié)束
  • 在相等判斷情況下,switch結(jié)構(gòu)與if-else if-else結(jié)構(gòu)可以相互替代
  • 對(duì)于if-else if-else塊四瘫,switch結(jié)構(gòu)的性能更好
switch(month){
case12:
System.out.println("冬季");
break;
case1:
System.out.println("冬季");
break;
case2:
System.out.println("冬季");
break;
case3:
System.out.println("春季");
break;
case4:
System.out.println("春季");
break;
case5:
System.out.println("春季");
break;
case6:
System.out.println("夏季");
break;
case7:
System.out.println("夏季");
break;
case8:
System.out.println("夏季");
break;
case9:
System.out.println("秋季");
break;
case10:
System.out.println("秋季");
break;
case11:
System.out.println("秋季");
break;
default:
System.out.println("請(qǐng)輸入一個(gè)1~12之間的一個(gè)整數(shù)");
break;
} System.out.println("完成");
  • 如果連續(xù)多個(gè)case塊中沒有break語句汉嗽,可以把它們合并為一組條件。同類條件會(huì)執(zhí)行相同的語句邏輯
switch(month){
case12:
case1:
case2:
System.out.println("冬季");
break;
case12:
case3:
case4:
case5:
System.out.println("冬季");
break;
case6:
case7:
case8:
System.out.println("冬季");
break;
case9:
case10:
case11:
System.out.println("冬季");
break;
default:
System.out.println("請(qǐng)輸入一個(gè)1~12之間的一個(gè)整數(shù)");
break;
} System.out.println("完成")
  1. while與do-while循環(huán)
  • 語法格式:
  • 變量初始化
  • while(循環(huán)條件){
  • 循環(huán)體}
  • 循環(huán)語句的主要作用是反復(fù)執(zhí)行一段代碼找蜜,直到滿足一定條件位置饼暑。可以把循環(huán)分成三個(gè)部分
  • 初始部分:設(shè)置循環(huán)初始狀態(tài)
  • 循環(huán)體:重復(fù)執(zhí)行的代碼
  • 循環(huán)條件:判斷是否繼續(xù)循環(huán)的條件
  • 計(jì)數(shù)器聲明一個(gè)用于判斷是否能進(jìn)入循環(huán)的變量
  • while循環(huán)體可能執(zhí)行0到多次洗做,原因是先判斷條件弓叛,再執(zhí)行邏輯
  • do-while循環(huán)體可能執(zhí)行1到多次,原因是先執(zhí)行邏輯诚纸,再判斷條件
  • (循環(huán)條件)是判斷是否可以執(zhí)行循環(huán)體的boolean表達(dá)式撰筷。當(dāng)其為true時(shí),執(zhí)行循環(huán)體畦徘。當(dāng)其為false時(shí)毕籽,跳過循環(huán)體,執(zhí)行后續(xù)代碼
  • 訊話題中的邏輯旧烧,改變是否進(jìn)入循環(huán)體的條件取值影钉,變更進(jìn)入循環(huán)體的條件如果缺失或錯(cuò)誤,則會(huì)出現(xiàn)死循環(huán)
n++;
System.out.println(n);

以上兩句可以合并為

System.out.println(n++);
  1. for循環(huán)
  • 各種循環(huán)結(jié)構(gòu)的使用場(chǎng)景
  • while和dowhile:在循環(huán)次數(shù)不定的場(chǎng)景下使用
  • for:在循環(huán)次數(shù)可知的場(chǎng)景下使用
  • forEach:用于遍歷數(shù)組或容器對(duì)象中的元素
  • 格式:for(聲明計(jì)數(shù)器初值;進(jìn)入循環(huán)的boolean表達(dá)式;修改計(jì)數(shù)器值){循環(huán)邏輯}
  • 第一步:初始化計(jì)數(shù)器掘剪,此部分執(zhí)行一次
  • 第二步:判斷是否可以進(jìn)入循環(huán)
  • 第三步:如果可以進(jìn)入循環(huán)平委,則執(zhí)行其中邏輯,否則跳過循環(huán)體
  • 第四步:當(dāng)循環(huán)體執(zhí)行完成后夺谁,進(jìn)行計(jì)數(shù)器的修改
  • 第五步:跳轉(zhuǎn)到第二步廉赔,開始下一次循環(huán)周期
for(int i = 1;i<11;i++){
System.out.println(i);
}System.out.println("Boom~~~");

for 循環(huán)的多重循環(huán)嵌套樣例

for(int i =1; i<=10 ;i++){
for(int j = 1;j<=i;j++){
System.out.println(j+"*"+i+"="+(j*i));
System.out.print("/t");
}System.out.println();
}
  1. forEach循環(huán) 遍歷數(shù)組
  • 傳統(tǒng)方式是使用數(shù)組元素的索引進(jìn)行數(shù)組元素的遍歷的(其中i是元素的索引值)
int []arr={10,20,30,40,50,60,70,80,90,100};
for(int i = 0;i<arr.lengthe;i++);
System.out.println(arr[i]);
  • Java5 后一如的forEach循環(huán)語法(增強(qiáng)for循環(huán))
  • 格式:for(元素類型聲明 當(dāng)前元素的變量名;待遍歷的數(shù)組或容器對(duì)象){
    循環(huán)體}
  • 進(jìn)入forEach循環(huán)肉微,會(huì)從被遍歷的數(shù)組對(duì)象的第一個(gè)元素開始處理,每次循環(huán)蜡塌,處理一個(gè)元素碉纳,這個(gè)元素被element變量持有。與傳統(tǒng)for循環(huán)遍歷數(shù)組不同馏艾,此處的element不是索引劳曹,而是元素本身的值。當(dāng)數(shù)組的所有元素被遍歷完成后琅摩,循環(huán)結(jié)束铁孵。forEach循環(huán)不會(huì)出現(xiàn)數(shù)組索引越界異常。相對(duì)于傳統(tǒng)的for循環(huán)遍歷數(shù)組房资,forEach更安全
for(int element:arr){
System.out.println(element);
}

跳轉(zhuǎn)語句

  1. break語句
    • break語句在循環(huán)中的作用是終止當(dāng)前循環(huán)蜕劝。
import java.util.Random;

// 隨機(jī)生成0~9之間的整數(shù),但當(dāng)出現(xiàn)5時(shí)停止輸出轰异。
public class BreakDemo001 {
    public static void main(String[] args) {
        // [0, 1)
        double r1 = Math.random();

        Random random = new Random();
        boolean b1 = random.nextBoolean();

        while (true) {
            // [0, n)
            int int1 = random.nextInt(10);
            if (int1 == 5) {
                // 終止循環(huán)岖沛,跳轉(zhuǎn)到循環(huán)體之外的語句
                // 通常會(huì)使用在分支結(jié)構(gòu)中,即當(dāng)滿足某條件時(shí)才觸發(fā)
                break;
            }
            System.out.println(int1);
        }
        System.out.println("5了~~~");
    }
}
  1. continue語句
    • continue語句的作用是強(qiáng)制循環(huán)提前返回搭独,也就是讓循環(huán)跳過本次循環(huán)中的剩余代碼婴削,然后開始下一次循環(huán)。
// 輸出1~100之間的數(shù)字戳稽,但不包含7的倍數(shù)馆蠕。
public class ContinueDemo001 {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            if (i % 7 == 0) {
                // 終止本次循環(huán),開始下一次循環(huán)
                // 在本次循環(huán)中惊奇,會(huì)跳過后續(xù)所有循環(huán)體中的語句
                // 通常會(huì)使用在分支結(jié)構(gòu)中互躬,即當(dāng)滿足某條件時(shí)才觸發(fā)
                continue;
            }
            System.out.println(i);
        }
    }
}
  1. return語句
    • return語句的作用是結(jié)束當(dāng)前方法的執(zhí)行并退出返回到調(diào)用該方法的語句處。
import java.util.Random;

// 隨機(jī)生成0~9之間的整數(shù)颂郎,但當(dāng)出現(xiàn)5時(shí)停止輸出吼渡。
public class ReturnDemo001 {
    public static void main(String[] args) {
        Random random = new Random();

        while (true) {
            int int1 = random.nextInt(10);
            if (int1 == 5) {
                // return是方法的正常結(jié)束的出口
                // 一旦執(zhí)行了return,則所在方法的執(zhí)行就結(jié)束了
                // 通常會(huì)在分支結(jié)構(gòu)中使用乓序,即當(dāng)滿足某條件時(shí)才觸發(fā)
                return;
            }
            System.out.println(int1);
        }
        // 因?yàn)橐陨涎h(huán)中唯一結(jié)束的方式只有return寺酪,
        // 所以以下代碼是不可能被執(zhí)行的,不能通過編譯
        // System.out.println("5了~~~");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末替劈,一起剝皮案震驚了整個(gè)濱河市寄雀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陨献,老刑警劉巖盒犹,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡急膀,警方通過查閱死者的電腦和手機(jī)沮协,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卓嫂,“玉大人慷暂,你說我怎么就攤上這事〕况ǎ” “怎么了行瑞?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長餐禁。 經(jīng)常有香客問我蘑辑,道長,這世上最難降的妖魔是什么坠宴? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮绷旗,結(jié)果婚禮上喜鼓,老公的妹妹穿的比我還像新娘。我一直安慰自己衔肢,他們只是感情好庄岖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著角骤,像睡著了一般隅忿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邦尊,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天背桐,我揣著相機(jī)與錄音,去河邊找鬼蝉揍。 笑死链峭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的又沾。 我是一名探鬼主播弊仪,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杖刷!你這毒婦竟也來了励饵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤滑燃,失蹤者是張志新(化名)和其女友劉穎役听,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡禾嫉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年灾杰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熙参。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艳吠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孽椰,到底是詐尸還是另有隱情昭娩,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布黍匾,位于F島的核電站栏渺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锐涯。R本人自食惡果不足惜磕诊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纹腌。 院中可真熱鬧霎终,春花似錦、人聲如沸升薯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涎劈。三九已至广凸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛛枚,已是汗流浹背谅海。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹦浦,地道東北人胁赢。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像白筹,于是被迫代替她去往敵國和親智末。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • Swift 提供了類似 C 語言的流程控制結(jié)構(gòu)徒河,包括可以多次執(zhí)行任務(wù)的for和while循環(huán)系馆,基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 695評(píng)論 1 1
  • [The Swift Programming Language 中文版]本頁包含內(nèi)容: Swift提供了多種流程控...
    風(fēng)林山火閱讀 560評(píng)論 0 0
  • Swift提供了多種控制流聲明。包括while循環(huán)來多次執(zhí)行一個(gè)任務(wù)顽照;if由蘑,guard和switch聲明來根據(jù)確定...
    BoomLee閱讀 1,939評(píng)論 0 3
  • 控制流 Swift提供了各種控制流程語句闽寡。這些包括while循環(huán)多次執(zhí)行任務(wù); if,guard以及switch基...
    Fuuqiu閱讀 368評(píng)論 0 0
  • 尊敬的劉珅宏導(dǎo)師宋姜華導(dǎo)師親愛的家人們:晚上好 今日分享:感恩導(dǎo)師尼酿!感恩生命中的貴人爷狈。 昨天我們有個(gè)研修活...
    小君_10d9閱讀 913評(píng)論 0 1