Kotlin Tutorial(6)迴圈與範圍 by Michael | CodeData
top

Kotlin Tutorial(6)迴圈與範圍

分享:
tags: kotlin loop

Kotlin Tutorial(5)決策與判斷 << 前情

Kotlin提供跟一般程式設計語言類似的迴圈,包含while和do-while兩種迴圈,用來執行重複的工作,例如處理多筆資料。Kotlin改良一般程式設計語言也都有的for迴圈,搭配「範圍運算式、Range expresssions」,讓for迴圈更簡單、好用。

while迴圈

while迴圈使用boolean運算式控制迴圈執行的次數,依照應用程式的需求,控制迴圈執行的次數。這是while迴圈的語法:

while (<boolean運算式>) {
    迴圈執行的工作
}

如果迴圈執行的工作只有一行敘述的時候,可以省略左、右大括號({、}):

while (<boolean運算式>)
    迴圈執行的工作(只有一行敘述)

如果應用程式需要執行特定次數的工作,可以使用下面範例程式的作法,

/* net.macdidi5.kotlin.tutorial.ch06.HelloWhile01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    // 宣告迴圈執行次數用的變數
    var i = 0

    // 使用boolean運算式控制迴圈執行的次數
    while (i < 5) {
        print(i)
        // 每執行一次迴圈,變數就加一
        i++
    }

    // 顯示:01234
}

使用while迴圈可以執行合計這類工作:

/* net.macdidi5.kotlin.tutorial.ch06.HelloWhile02.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    var i = 1
    // 宣告加總用的變數
    var total = 0

    // 執行一加到十的迴圈
    while (i <= 10) {
        total += i
        i++
    }

    println("Total: $total")
    // 顯示:Total: 55
}

do while迴圈

do while與while非常類似,下面是它的語法:

do {
    迴圈執行的工作
} while (<boolean運算式>)

如果迴圈執行的工作只有一行敘述的時候,可以省略左、右大括號({、}):

do 
    迴圈執行的工作(只有一行敘述)
while (<boolean運算式>)

while迴圈根據資料與條件的判斷,在執行後會執行零到多次。do while迴圈把條件的判斷放在最後,所以它一定會執行一次。一般迴圈的應用,可以使用while或do while迴圈,例如下面這個基本的範例程式:

/* net.macdidi5.kotlin.tutorial.ch06.HelloDoWhile01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    var i = 0

    do {
        print(i)
        i++
    } while (i < 5)

    // 顯示:01234
}

使用do while迴圈可以執行合計這類工作:

/* net.macdidi5.kotlin.tutorial.ch06.HelloDoWhile02.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    var i = 1
    var total = 0

    do {
        total += i
        i++
    } while (i <= 10)

    println("Total: $total")
    // 顯示:Total: 55
}

for迴圈與範圍

一般程式設計語言提供的for迴圈,在使用上與while、do while迴圈類似,同樣需要自己宣告變數與設定條件。Kotlin把for迴圈設計的比較簡單一些,搭配使用範圍運算式(range expression),可以更方便完成其它迴圈執行的工作。for迴圈還可以來處理陣列與集合資料,目前先瞭解一般迴圈的應用,下面是for迴圈搭配範圍運算式的語法:

for (變數名稱 in 起始值..終止值) {
    迴圈執行的工作
}

如果迴圈執行的工作只有一行敘述的時候,可以省略左、右大括號({、}):

for (變數名稱 in 起始值..終止值)
    迴圈執行的工作(只有一行敘述)

使用for迴圈執行固定次數的工作,可以使用範圍運算式設定迴圈執行的次數,例如下面執行五次的for迴圈範例:

/* net.macdidi5.kotlin.tutorial.ch06.HelloFor01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    for (i in 0..4) {
        print(i)
    }

    // 顯示:01234

    println()

    for (c in 'A'..'E')
        print(c)

    // 顯示:ABCDE
}

依照迴圈執行的工作,可以設定需要的範圍運算式,例如下面執行合計的範例程式:

/* net.macdidi5.kotlin.tutorial.ch06.HelloFor02.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    var total = 0

    for (i in 1..10) {
        total += i
    }

    println("Total: $total")
    // 顯示:Total: 55
}

範圍運算式設計的非常靈活,你可以依照應用程式的需求,使用下面的法法:

// 從n(最小值)到m(最大值)
變數名稱 in <n>..<m>
// 從n(最小值)到m(最大值),每次增加x
變數名稱 in <n>..<m> step <x>

// 從n(最小值)到m-1(最大值)    
變數名稱 in <n> until <m>
// 從n(最小值)到m-1(最大值),每次增加x
變數名稱 in <n> until <m> step <x>

// 從n(最大值)到m(最小值)
變數名稱 in <n> downTo <m>
// 從n(最大值)到m(最小值),每次減少x    
變數名稱 in <n> downTo <m> step <x>

下面的範例程式示範各種範圍運算式的效果:

/* net.macdidi5.kotlin.tutorial.ch06.HelloFor03.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    for (i in 1..5) {
        print(i)    // 顯示:12345
    }

    println()

    for (i in 1..5 step 2) {
        print(i)    // 顯示:135
    }

    println()

    for (i in 1 until 5) {
        print(i)    // 顯示:1234
    }

    println()

    for (i in 5..1) {   // 迴圈不會執行
        print(i)
    }

    println()

    for (i in 5 downTo 1) {
        print(i)    // 顯示:54321
    }

    println()

    for (i in 5 downTo 1 step 2) {
        print(i)    // 顯示:531
    }

}

break與continue

依照應用程式的需求,使用迴圈的設定可以完成一般的工作。如果需要在迴圈運作的過程執行特別的流程控制,可以在三種迴圈裡面使用break離開迴圈:

kt_06_01

下面的範例程式示範break在while迴圈的效果,其它兩種迴圈同樣適用:

/* net.macdidi5.kotlin.tutorial.ch06.HelloBreak01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    var i = 0

    while (true) {
        print(i)
        i++

        if (i == 5) {
            break
        }
    }

    // 顯示:01234
}

continue可以在三種迴圈裡面執行特別的流程控制:

kt_06_02

下面的範例程式示範continue在for迴圈的效果,其它兩種迴圈同樣適用:

/* net.macdidi5.kotlin.tutorial.ch06.HelloContinue01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    for (i in 1..50) {
        // Math.random()產生一個隨機數字
        val temp = (Math.random() * 36).toInt()

        if (temp < 30) {
            continue
        }

        println("Temperature[$i]: $temp")
    }
}

Label

有時候應用程式需要使用多層的迴圈執行比較複雜的工作,通常會稱為巢狀迴圈。如果在巢狀迴圈需要執行特別的流程控制,可以先使用標籤(Label)幫迴圈命名,再使用下面的語法:

kt_06_03

下面的範例程式示範break與標籤在for迴圈的效果,其它兩種迴圈同樣適用:

/* net.macdidi5.kotlin.tutorial.ch06.HelloBreakLabel01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    outer@ for (x in 1..5) {
        for (y in 1..5) {
            println("X:$x - Y:$y")

            if (y == 3) {
                break@outer
            }
        }
    }

    // 顯示:
    // X:1 - Y:1
    // X:1 - Y:2
    // X:1 - Y:3
}

continue與標籤可以在三種迴圈裡面執行特別的流程控制:

kt_06_04

下面的範例程式示範continue與標籤在for迴圈的效果,其它兩種迴圈同樣適用:

/* net.macdidi5.kotlin.tutorial.ch06.HelloContinueLabel01.kt */

package net.macdidi5.kotlin.tutorial.ch06

fun main(args: Array<String>) {
    outer@ for (x in 1..5) {
        for (y in 1..5) {
            if (y > 3) {
                continue@outer
            }

            print(y)
        }

        println("=>X:$x")
    }

    // 顯示: 123123123123123
}

下一步

現在已經認識Kotlin程式設計語言基本的架構、變數、型態與流程控制,這些也是所有程式設計語言最基礎的部份。接下來準備認識在應用程式經常使用的「陣列」,搭配for迴圈用來處理比較大量的資料。

相關的檔案都可以在GitHub瀏覽與下載。

https://github.com/macdidi5/Kotlin-Tutorial

後續 >> Kotlin Tutorial(7)陣列

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言