迴圈一時爽,一直迴圈一直爽

迴圈就是不斷重複的做某件事的意思。在Kotlin裡面有三種迴圈while、do-while、for,其中while迴圈跟我們剛剛學完的if判斷式語法比較類似,所以我們先來從while迴圈來開始認識吧!

while迴圈

fun main() {
    var x = 1
    while (x <= 10) {
        println(x)
        x++;
    }
    // 列印出1到10
}

while迴圈跟if判斷式一樣有一對“( )”跟一對“{ }”,跟if判斷式不一樣的,當if在符合條件的時候會執行“一次”在“{ }”裡面的程式碼,但是while則是只要符合條件就會一直執行、一直執行、一直執行,執行到天荒地老,執行到條件不符合為止。

do-while迴圈

do-while迴圈則跟while迴圈類似,不同的地方是while迴圈只要條件不符合,就“一次也不會執行”。但是do-while迴圈則是“先執行do之後,才判斷條件”,如果條件符合就會再次執行。所以迴圈的部分“至少會被執行一次”,我們可以用一下兩個範例來比較看看:

fun main() {
    var x = 10
    
    while (x < 10) {
        println(x)
    }
}
fun main() {
    var x = 10

    do {
        println(x)
    } while (x < 10)
}

for迴圈

相對於while跟do-while是使用條件來判斷要不要繼續執行,for迴圈則是適合用來“遍歷”一系列的東西

數字範圍

還記得我們之前提到的Range嗎?在for迴圈裡他回來了!這次他還帶來了他的好朋友“until”、“downTo”還有“step”,我們一個一個來看看:

rangeTo

fun main() {
    for (i in 1..10) {
        println(i)
    }
}

rangeUntil

在這個例子我們範圍是從1到10,所以迴圈裡面會從x = 1開始依次執行到x = 10,接下來我們來認識until:

fun main() {
    for (i in 1 until 10) {
        println(i)
    }
}

until跟rangeTo的不同點我們可以在IDE的提示裡面看出來:

此外until也可以用rangeUntil運算子(..<)替代。

downTo

上面舉的例子都是從小到大,可是如果我們要從大到小的話,要怎麼做呢?我們來看看下面的例子:

fun main() {
    for (i in 10 downTo 1) {
        println(i)
    }
}

step

如果每次執行的時候需要有固定間隔的時候,我們可以使用step:

fun main() {
    for (i in 1 .. 10 step 2) {
        println(i)
    }
}

遍歷集合

我們也可以使用for迴圈遍歷集合中的所有項目,我們首先以我們認識的陣列來舉例,其他的集合我們之後會再詳細介紹

基礎

我們可以用類似range的方法遍歷集合中的所有元素:

fun main() {
    val numbers = arrayOf(5, 8, 2, 9)
    for (number in numbers) {
        println(number)
    }
}

indices

我們也可以使用indices在遍歷集合的時候只取得索引值:

fun main() {
    val numbers = arrayOf(5, 8, 2, 9)
    for (index in numbers.indices) {
        println(index)
    }
}

withIndex

最後如果我們同時需要同時取得元素跟索引值,可以使用withIndex方法:

fun main() {
    val numbers = arrayOf(5, 8, 2, 9)
    for ((index, number) in numbers.withIndex()) {
        println("$index: $number")
    }
}

Last updated