一健提、程序流程控制概述
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)變量迭代
}
- 循環(huán)條件是返回一個(gè)布爾值的表達(dá)式
- while 循環(huán)是** 先判斷膘婶,再執(zhí)行 **語(yǔ)句
- 與 If 語(yǔ)句不同缺前,While 語(yǔ)句本身沒(méi)有值,即整個(gè) While 語(yǔ)句的結(jié)果是 Unit 類型的()
- 因?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)條件)
- 循環(huán)條件是返回一個(gè)布爾值的表達(dá)式
- do..while 循環(huán)是 先執(zhí)行,再判斷
- 和 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
}
}