迴圈
在 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
每次迴圈中,index
和item
變量被賦值為當前的索引和元素。
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提供break
、continue
跳出迴圈的語法。
break
:當程式執行到break
時,從最近的迴圈跳出並且結束整個迴圈。continue
:當程式執行到continue
時,從最近的迴圈跳出,並執行迴圈的下一次。continue
與break
不同的地方是,continue
只是跳出這一次迴圈,並不會結束整個迴圈。
Example
for (i in 1..10) {
if (i == 5) break // 當 i 等於 5 時終止循環
if (i == 3) continue // 當 i 等於 3 時跳過當前迴圈,繼續下一次迴圈
println(i)
}
標籤(labels)
Kotlin 支持在迴圈前使用標籤,並允許在巢狀迴圈中使用 break
或 continue
來指向標籤處的迴圈。
標籤的形式為標籤名稱後面加上 @
符號,例如 abc@
或 fooBar@
。
Example
下面範例是i
等於5
且j
等於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