Scala之for循環

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")
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章