java中的for循環
for (int j = 0; j <10 ; j++) {
//循環體
}
for (String s: strings){
//循環體
}
scala中for循環
1.使用 1 to 5 表示循環的范圍,從1到5(包含5)
// 使用 1 to 5 表示循環的范圍,從1到5(包含5)
for (i <- 1 to 5) {
print(s"i = ${i} \t")
}
在scala中1 to 5也可寫為1.to(5)
// 0.until(5) ==> 0 until 5
// 0.to(5) ==> 0 to 5
// 1.+(1) ==> 1 + 1
for (i <- 1.to(5)) {
print(s"i = ${i} \t")
}
scala中數字也是對象,可以調用方法
scala是完全面向對象的語言,所以沒有基本數據類型
Scala 與 Java有着相同的數據類型,在Scala中數據類型都是對象,也就是說scala沒有java中的原生類型
2.使用 1 until 5 表示循環的范圍,從1截止到5(不包含)
//def until(end: Int): Range = Range(self, end)
for (i <- 1 until 5) {
print(s"i = ${i} \t")
}
// TODO Range(start,end) 范圍對象,等同於until,不包含end
// for循環的步長可以使用Range控制
for (i <- Range(0, 5, 2)) {
print(s"i = ${i} \t") //i = 0 i = 2 i = 4
}
3.嵌套循環
for (i <- 1 to 3) {
for (j <- 1 until 3) {
println(s"${i} = ${j}")
}
}
九層妖塔
for (i <- Range(1, 18, 2)) {
println(" " * ((18 - i) / 2) + "*" * i + " " * ((18 - i) / 2))
}
// TODO 沒有關鍵字,所以范圍后一定要加;來隔斷邏輯
for (i <- Range(1, 18, 2); j = (18 - i) / 2) {
println(" " * j + "*" * i + " " * j)
}
// for循環中可以使用一行代碼聲明變量,也可以使用多行來聲明變量,但是需要將小括號變成大括號
// 表達式如果有多行代碼,那么可以采用大括號聲明
// TODO 當for 推導式僅包含單一表達式時使用圓括號,當其包含多個表達式時使用大括號
for {i <- Range(1, 18, 2)
j = (18 - i) / 2} {
println(" " * j + "*" * i + " " * j)
}
4.循環守衛
// 循環守衛,即循環保護式(也稱條件判斷式,守衛)。保護式為true則進入循環體內部,為false則跳過,類似於continue
for (i <- 1 to 5 if i % 2 == 0) {
println(s"${i}")
}
5.默認情況下,for循環的返回值為()
val unit: Unit = for (i <- 1 to 3) {
"abc"
}
6.將遍歷過程中處理的結果返回到一個新Vector集合中,使用yield關鍵字
val res: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield i * 2
println(res)
7.中斷循環break
// java中采用break語法實現
// scala中沒有break關鍵字,但是可以采用對象的方式進行中斷
// try {} catch
//Breaks.breakable()
breakable {
for (i <- 1 to 10) {
if (i == 5) {
//def break(): Nothing = { throw breakException }
break
}
println(s"i = ${i}")
}
}
breakable {
for (i <- 1 to 20) {
if (i >= 9) {
println()
break()
}
print(i + "\t")
}
}