烏魯木齊網(wǎng)站信息流投放平臺(tái)
?
目錄
單分支
雙分支
多分支
?for 循環(huán)控制
循環(huán)守衛(wèi)
?循環(huán)步長(zhǎng)
循環(huán)嵌套
?循環(huán)返回值
?While 和 do..While 循環(huán)控制
While循環(huán)控制
do..While 循環(huán)控制
?循環(huán)中斷
單分支
if (條件表達(dá)式) {執(zhí)行代碼塊
}
var age = StdIn.readShort()if (age < 18){println("童年")
}
雙分支
if (條件表達(dá)式) {執(zhí)行代碼塊 1
} else {執(zhí)行代碼塊 2
}
var age = StdIn.readShort()if (age < 18){println("童年")}else{println("成年")}
多分支
if (條件表達(dá)式 1) {執(zhí)行代碼塊 1
}
else if (條件表達(dá)式 2) {執(zhí)行代碼塊 2
……
else {執(zhí)行代碼塊 n
}
println("input age")
var age = StdIn.readInt()if (age < 18){println("童年")
}else if(age>=18 && age<30){println("中年")
}else{println("老年")
}
Scala 中 if else 表達(dá)式其實(shí)是有返回值的,具體返回值取決于滿足條件的代碼體的最后一行內(nèi)容。
val res :String = if (age < 18){"童年"
}else if(age>=18 && age<30){"中年"
}else{"老年"
}println(res)
?for 循環(huán)控制
for(i <- 1 to 3){print(i + " ")
}
println()
<- 表示java里面的:,1 to 3 表示[1,2,3],前后閉合
循環(huán)守衛(wèi)
for(i <- 1 to 3 if i != 2) { print(i + " ")
}
println()
????????循環(huán)守衛(wèi),即循環(huán)保護(hù)式(也稱條件判斷式,守衛(wèi))。保護(hù)式為 true 則進(jìn)入循環(huán)體內(nèi)部,為false 則跳過,類似于continue。
?
?循環(huán)步長(zhǎng)
for (i <- 1 to 10 by 2) {println("i=" + i)
}
循環(huán)嵌套
//兩種寫法效果相同,但是第二種能應(yīng)對(duì)更多的情況for (i <- 1 to 2; j <- 1 to 2) {println(" i = " + i + " j = " + j)}for (i <- 1 to 2) {// some codefor (j <- 1 to 2) {println(" i = " + i + " j = " + j)}}
- for 推導(dǎo)式一行中有多個(gè)表達(dá)式時(shí),所以要加 ; 來隔斷邏輯
- for 推導(dǎo)式有一個(gè)不成文的約定:當(dāng) for 推導(dǎo)式僅包含單一表達(dá)式時(shí)使用圓括號(hào), 當(dāng)包含多個(gè)表達(dá)式時(shí),一般每行一個(gè)表達(dá)式,并用花括號(hào)代替圓括號(hào),如下
for {i <- 1 to 3 j = 4 - i
} {println("i=" + i + " j=" + j)
}
上面代碼等價(jià)于
for (i <- 1 to 3) { var j = 4 - iprintln("i=" + i + " j=" + j)
}
?循環(huán)返回值
將遍歷過程中處理的結(jié)果返回到一個(gè)新 Vector 集合中,使用 yield 關(guān)鍵字。
很少使用 ,了解即可
var res = for (i <- 1 to 10) yield (i + 1)println(res)
?While 和 do..While 循環(huán)控制
While循環(huán)控制
循環(huán)變量初始化
while (循環(huán)條件) {循環(huán)體(語(yǔ)句) 循環(huán)變量迭代
}
?
- 循環(huán)條件是返回一個(gè)布爾值的表達(dá)式
- while 循環(huán)是先判斷再執(zhí)行語(yǔ)句
- 與 for 語(yǔ)句不同,while 語(yǔ)句沒有返回值,即整個(gè) while 語(yǔ)句的結(jié)果是Unit 類型()
- 因?yàn)?while 中沒有返回值,所以當(dāng)要用該語(yǔ)句來計(jì)算并返回結(jié)果時(shí),就不可避免的使用變量,而變量需要聲明在 while 循環(huán)的外部,那么就等同于循環(huán)的內(nèi)部對(duì)外部的變量造成了影響,所以不推薦使用,而是推薦使用 for 循環(huán)。
var i = 1while (i < 5) {println(s"while第${i}次輸出")i += 1}
?
do..While 循環(huán)控制
循環(huán)變量初始化;
do{循環(huán)體(語(yǔ)句) 循環(huán)變量迭代
} while(循環(huán)條件)
- ?循環(huán)條件是返回一個(gè)布爾值的表達(dá)式
- do..while 循環(huán)是先執(zhí)行,再判斷
var i = 1do {println(s"這是do while第${i}次輸出")i += 1} while (i < 5)
?
?循環(huán)中斷
????????Scala 內(nèi)置控制結(jié)構(gòu)特地去掉了 break 和 continue,是為了更好的適應(yīng)函數(shù)式編程,推薦使用函數(shù)式的風(fēng)格解決break 和continue 的功能,而不是一個(gè)關(guān)鍵字。Scala 中使用breakable 控制結(jié)構(gòu)來實(shí)現(xiàn) break 和 continue 功能。
?
import scala.util.control.Breaksobject TestContinue {def main(args: Array[String]): Unit = {Breaks.breakable(for (i <- 1 to 10) {if (i % 2 == 0) {Breaks.break()}println(i)})println("exit")}}
?