Kotlin教學 | 從零開始學Kotlin | Kotlin入門 | CH4: 迴圈(Loop)

迴圈

在 Kotlin 中,迴圈語法允許你重複執行程式碼區塊,直到滿足特定條件。
Kotlin 提供了幾種迴圈語法:for 迴圈、while 迴圈和 do-while 迴圈。

For 迴圈

for 迴圈在 Kotlin 中用於遍歷任何提供的範圍(range)集合(collection)

範圍(Range)

for 迴圈會遍歷Range範圍中的值,每次迴圈i會增加N,直到i這次增加的值超出範圍,迴圈才結束。

for (i in Range step N) {
    // codes
}
  • i 是迴圈變量,被賦值為這次迴圈的值,每次迴圈i會增加N
  • Range 是範圍表達式,定義一個範圍
    • .. 表示創建正序範圍,包含起始值和終止值。
    • ..<until 表示創建正序範圍,包含起始值,但是不包含終止值。
    • downTo 表示創建逆序範圍,包含起始值和終止值。
  • step 用來指定每次迴圈的增量 N
  • N 每次迴圈的增量,若沒指定預設是1
  • { } 大括號內是每次迴圈會執行的程式碼,如果程式碼只有一行,可以省略大括號{ }

Example

for (i in 1..5) 
    println(i) // 輸出 1 到 5


for (i in 5 downTo 1) {
    println(i) // 輸出 5 到 1
}

for (i in 1..10 step 2) {
    println(i) // 這會打印 1, 3, 5, 7, 9
}

for (i in 10 downTo 1 step 2) {
    println(i) // 這會打印 10, 8, 6, 4, 2
}

集合(collection)

訪問集合的元素

for 迴圈來遍歷集合(例如陣列、列表等)中的每個元素,所有元素都遍歷過才結束迴圈。

for (item in collection) {
    //use item variable
}
  • collection 是你想要遍歷的集合。它可以是任何類型的集合,如 List、Set、Array 等。
  • item 是在每次迴圈中自動獲取當前元素的變量。
  • { } 大括號內是迴圈體,每次迴圈會執行的程式碼,如果程式碼只有一行,可以省略大括號{ }
    在迴圈體內,可以使用item 變量來訪問當前的元素並對其進行操作。
Example

這段程式碼會逐一遍歷 items列表中的每個元素,並使用 println 函數打印每個value

val items = listOf("apple", "banana", "kiwifruit") // List of item

for (value in items) {
    println(value)
}

訪問集合的索引(index)

collection.indices 屬性提供集合的索引。
如果想要for 迴圈遍歷集合的索引,可以使用collection.indices

Example

for迴圈中,index 變量被賦值為當前的索引,每次加一。
println函數使用字串模板打印出每個元素和索引,$index 為當前的索引,${items[index]} 為索引為index的元素。

for (index in items.indices) {
    println("item at $index is ${items[index]}")
}

同時訪問集合的元素和索引

collection.withIndex()函數產生每個元素和它的索引。
如果想要for 迴圈遍歷集合的元素和索引,可以使用collection.withIndex()

Example

每次迴圈中,indexitem 變量被賦值為當前的索引和元素。

for ( (index, value) in items.withIndex()) {
    println("item at $index is $value")
}

While 迴圈

while 迴圈在給定條件為 true 時反複執行程式碼區塊。

while (condition) {
    // codes
}

Do-While 迴圈

do-while 迴圈類似於 while 迴圈,不同之處在於它至少會執行一次程式碼區塊,然後再檢查條件。

do {
    // codes
} while (condition)

跳出迴圈

迴圈會一直執行,直到條件不滿足才離開,但是有時候會出現,需要中途跳出迴圈的情況。
Kotlin提供breakcontinue跳出迴圈的語法。

  • break:當程式執行到break時,從最近的迴圈跳出並且結束整個迴圈。
  • continue:當程式執行到continue時,從最近的迴圈跳出,並執行迴圈的下一次。
    continuebreak不同的地方是,continue只是跳出這一次迴圈,並不會結束整個迴圈。

Example

for (i in 1..10) {
    if (i == 5) break // 當 i 等於 5 時終止循環
    if (i == 3) continue // 當 i 等於 3 時跳過當前迴圈,繼續下一次迴圈
    println(i)
}

標籤(labels)

Kotlin 支持在迴圈前使用標籤,並允許在巢狀迴圈中使用 breakcontinue 來指向標籤處的迴圈。
標籤的形式為標籤名稱後面加上 @ 符號,例如 abc@fooBar@

Example

下面範例是i等於5j等於6時,跳出內層迴圈和外層迴圈。
如果break沒有loop@,則只會跳出內層迴圈,繼續執行外層迴圈(i等於6)。

loop@ for (i in 1..10) {
    for (j in 1..10) {
        if (i==5 && j==6) {
            break@loop // 跳出標記為 loop@ 的循環
        }
    }
}

Reference

https://kotlinlang.org/docs/control-flow.html#for-loops

https://kotlinlang.org/docs/control-flow.html#while-loops

https://kotlinlang.org/docs/returns.html#break-and-continue-labels

https://kotlinlang.org/docs/basic-syntax.html#for-loop

https://kotlinlang.org/docs/ranges.html#progression

發佈留言