6.Scala程序流程控制

一健提、程序流程控制概述

1) 順序控制
2) 分支控制
3) 循環(huán)控制

二惠奸、If

if (條件表達(dá)式 1) {
    執(zhí)行代碼塊 1
}
else if (條件表達(dá)式 2) {
    執(zhí)行代碼塊 2
}
……
else {
    執(zhí)行代碼塊 n
}
Scala 中任意表達(dá)式都是有返回值的闰集,也就意味著 if else表達(dá)式其實(shí)是有返回結(jié)果的,具體返回結(jié)果的值取決于滿足條件的代碼體的最后一行內(nèi)容

If 嵌套分支

一個(gè)分支結(jié)構(gòu)中又完整的嵌套了另一個(gè)完整的分支結(jié)構(gòu)

if(){
    if(條件表達(dá)式){
        執(zhí)行代碼塊 1
    }else{
        執(zhí)行代碼塊 2
    }
}

三科汗、switch

==在 scala 中沒(méi)有 switch,而是 使用模式匹配來(lái)處理==

四藻烤、for 循環(huán)控制

1.范圍數(shù)據(jù)循環(huán)方式

//輸出 10 句 "hello"
for (i <- 1 to 10) {   //包括右邊部分
// for(i <- 1 until 11) // 不包括右邊部分
    println("hello " + i)
}


// 直接對(duì)集合進(jìn)行遍歷
for (item <- list) {
    println("item=" + item)
}

2.循環(huán)守衛(wèi)

① 循環(huán)保護(hù)式(也稱條件判斷式,守衛(wèi))头滔。保護(hù)式為 true 則進(jìn)入循環(huán)體內(nèi)部隐绵,為 false則跳過(guò),類似于 continue
// i從1到3,并且i不等于2
for(i <- 1 to 3 if i != 2) {
    println(i + " ")
}
② 引入變量拙毫,沒(méi)有關(guān)鍵字,所以范圍后一定要加棺禾;來(lái)隔斷邏輯
for(i <- 1 to 3; j = i + 10) {
    println(j)
}

③ 嵌套循環(huán)

// 嵌套循環(huán)i從1-3 , j從2-4
for (i <- 1 to 3; j <- 2 to 4) {
    println("i=" + i + " , j=" + j)
}

i=1 , j=2
i=1 , j=3
i=1 , j=4
i=2 , j=2
i=2 , j=3
i=2 , j=4
i=3 , j=2
i=3 , j=3
i=3 , j=4

④ 循環(huán)返回值

將遍歷過(guò)程中處理的結(jié)果返回到一個(gè)新 Vector 集合中缀蹄,使用 yield 關(guān)鍵字
val res = for(i <- 1 to 10) yield {
    i  // 實(shí)際上輸出的就是i的集合
}
println(res)

⑤使用花括號(hào){}代替圓括號(hào)(),可以省略分號(hào)

for{
    i <- 1 to 3
    j = i * 2
} 
{
    println(" i= " + i + " j= " + j)
}

⑥ 使用步長(zhǎng)-Range控制

//Range(1,10,2) 的對(duì)應(yīng)的構(gòu)建方法是
//def apply(start: Int, end: Int, step: Int): Range = new Range(start, end, step)
for (i <- Range(1, 10, 2)) {
    println("i=" + i)
}

五、while

while (循環(huán)條件) {
    循環(huán)體(語(yǔ)句)
    循環(huán)變量迭代
}
  1. 循環(huán)條件是返回一個(gè)布爾值的表達(dá)式
  2. while 循環(huán)是** 先判斷膘婶,再執(zhí)行 **語(yǔ)句
  3. 與 If 語(yǔ)句不同缺前,While 語(yǔ)句本身沒(méi)有值,即整個(gè) While 語(yǔ)句的結(jié)果是 Unit 類型的()
  4. 因?yàn)?while 中沒(méi)有返回值,所以當(dāng)要用該語(yǔ)句來(lái)計(jì)算并返回結(jié)果時(shí),就不可避免的使用變量 悬襟,而變量需要聲明在 while循環(huán)的外部衅码,那么就等同于循環(huán)的內(nèi)部對(duì)外部的變量造成了影響,所以不推薦使用脊岳,而是 推薦使用 for 循環(huán)

六逝段、do while

do{
    循環(huán)體(語(yǔ)句)
    循環(huán)變量迭代
} while(循環(huán)條件)
  1. 循環(huán)條件是返回一個(gè)布爾值的表達(dá)式
  2. do..while 循環(huán)是 先執(zhí)行,再判斷
  3. 和 while 一樣割捅,因?yàn)閐o…while中沒(méi)有返回值,所以當(dāng)要用該語(yǔ)句來(lái)計(jì)算并返回結(jié)果時(shí),就不可避免的使用變量 奶躯,而變量需要聲明在do...while循環(huán)的外部,那么就等同于循環(huán)的內(nèi)部對(duì)外部的變量造成了影響亿驾,所以不推薦使用嘹黔,而是 推薦使用 for 循環(huán)

七、while循環(huán)的中斷

Scala 內(nèi)置控制結(jié)構(gòu)特地去掉了break和continue莫瞬,是為了更好的適應(yīng)函數(shù)化編程儡蔓,推薦使用函數(shù)式的風(fēng)格解決 break 和 contine 的功能,而不是一個(gè)關(guān)鍵字疼邀。

1.實(shí)現(xiàn)continue

for (i <- 1 to 10 if (i != 2 && i != 3)) {
    println("i=" + i)
}

2.通過(guò)break字段(需要在 Breaks.breakable 中)

val breaks = new Breaks
breaks.breakable {
    for (i <- 1 to 100) {
        sum += i
        if (sum > 20) {
            println("第一次和大于 20 的當(dāng)前數(shù)=" + i)
            breaks.break()
        }
    }
}

3.通過(guò)重置狀態(tài) loop(true | false)

for (i <- 1 to 100 if loop == true) {
    sum2 += i
    if (sum2 > 20) {
        loop = false
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喂江,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子檩小,更是在濱河造成了極大的恐慌开呐,老刑警劉巖烟勋,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異筐付,居然都是意外死亡卵惦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)瓦戚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沮尿,“玉大人,你說(shuō)我怎么就攤上這事较解⌒蠹玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵印衔,是天一觀的道長(zhǎng)啡捶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)奸焙,這世上最難降的妖魔是什么瞎暑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮与帆,結(jié)果婚禮上了赌,老公的妹妹穿的比我還像新娘。我一直安慰自己玄糟,他們只是感情好勿她,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著阵翎,像睡著了一般逢并。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贮喧,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天筒狠,我揣著相機(jī)與錄音,去河邊找鬼箱沦。 笑死辩恼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谓形。 我是一名探鬼主播灶伊,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寒跳!你這毒婦竟也來(lái)了聘萨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤童太,失蹤者是張志新(化名)和其女友劉穎米辐,沒(méi)想到半個(gè)月后胸完,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翘贮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年赊窥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狸页。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锨能,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芍耘,到底是詐尸還是另有隱情址遇,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布斋竞,位于F島的核電站倔约,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坝初。R本人自食惡果不足惜跺株,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脖卖。 院中可真熱鬧,春花似錦巧颈、人聲如沸畦木。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)十籍。三九已至,卻和暖如春唇礁,著一層夾襖步出監(jiān)牢的瞬間勾栗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工盏筐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留围俘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓琢融,卻偏偏與公主長(zhǎng)得像界牡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漾抬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • 本文是對(duì)Scala語(yǔ)言的基本語(yǔ)法的一個(gè)學(xué)習(xí)總結(jié)宿亡,共包括如下章節(jié): 基本元素 結(jié)構(gòu)化語(yǔ)句 數(shù)據(jù)類型 小結(jié) 參考資料:...
    我是老薛閱讀 967評(píng)論 0 3
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,407評(píng)論 0 5
  • Swift 提供了類似 C 語(yǔ)言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的for和while循環(huán)纳令,基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 706評(píng)論 1 1
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,352評(píng)論 0 2
  • 本章將會(huì)介紹 控制流For-In 循環(huán)While 循環(huán)If 條件語(yǔ)句Switch 語(yǔ)句控制轉(zhuǎn)移語(yǔ)句 continu...
    寒橋閱讀 727評(píng)論 0 0