【Kotlin】Kotlin流程控制

1 选择结构

Kotlin 中选择结构主要包含 if -else、when 语句,并且可以返回结果。

1.1 if-else

1.1. 条件选择

Kotlin 复制代码
fun main() {
    var score = 85
    if (score >= 90) {
        println("优秀")
    } else if (score >= 80) {
        println("良好")
    } else if (score >= 60) {
        println("及格")
    } else {
        println("不及格")
    }
}

说明:如果 {} 里只有一条语句,可以省略 {},if-else 语句可以嵌套使用,其他流程控制语句也可以嵌套使用。

1.1.2 条件返回

if-else 语句也可以作为结果判断。

1)单行案例

Kotlin 复制代码
fun main() {
    var score = 85
    var res = if (score > 60) "及格" else "不及格"
}

2)多行案例

Kotlin 复制代码
fun main() {
    var score = 85
    var res = if (score > 60) {
        println("恭喜您通过考试")
        "及格"
    } else {
        println("欢迎下次光临")
        "不及格"
    }
    println(res) // 及格
}

打印结果如下。

说明:返回结果需要放在 {} 中的最后一行,否则返回的是 Unit。

1.2 when

1.2.1 条件选择

when 语句与 Java 中 switch 语句类似。

1)简单案例

Kotlin 复制代码
fun main() {
    var grade = 'B'
    when(grade) {
        'A' -> {
            println("优秀")
        }
        'B' -> {
            println("良好")
        }
        'C' -> {
            println("及格")
        }
        else -> {
            println("不及格")
        }
    }
}

说明:如果 {} 里只有一条语句,可以省略 {}。

2)多分支合并

Kotlin 复制代码
fun main() {
    var grade = 'B'
    when(grade) {
        'A','B','C' -> println("及格")
        else -> println("不及格")
    }
}

1.2.2 条件返回

when 语句也可以作为结果判断。

1)简单案例

Kotlin 复制代码
fun main() {
    var grade = 'B'
    var res = when(grade) {
        'A' -> {
            println("你真棒")
            "优秀"
        }
        else -> {
            println("加油")
            "及格"
        }
    }
    println(res)
}

打印结果如下。

说明:返回结果需要放在 {} 中的最后一行,否则返回的是 Unit。

2)范围分支

Kotlin 复制代码
fun main() {
    var score = 85
    var res = when(score) {
        in 90..100 -> "优秀"
        in 80..<90 -> "良好"
        in 60..<80 -> "良好"
        else -> "不及格"
    }
    println(res) // "良好"
}

2 循环结构

Kotlin 中循环结构主要包含 for、while、do-while 循环结构。另外,continue 语句可以控制跳过某次循环,break 语句可以控制跳出循环体。

2.1 for

for 循环可以对任何提供迭代器(iterator)的对象进行遍历。

1)遍历整数范围(IntRange、IntProgression)

Kotlin 复制代码
fun main() {
    for (i in 1..5) {
        println(i) // 打印: 1、2、3、4、5
    }
    for (i in 5 downTo 1) {
        println(i) // 打印: 5、4、3、2、1
    }
    for (i in 1..<5 step 2) {
        println(i) // 打印: 1、3
    }
}

2)遍历数组 / 列表

Kotlin 复制代码
fun main() {
    var items = arrayOf("aa", "bb", "cc")
    // var items = listOf("aa", "bb", "cc")
    for (item in items) {
        println(item) // 打印: aa、bb、cc
    }
    for (index in items.indices) {
        println("items[${index}]=${items[index]}") // 打印: items[0]=aa、items[1]=bb、items[2]=cc
    }
}

2.2 while

Kotlin 复制代码
fun main() {
    var i = 0
    while(i < 5) {
        println(i)
        i++
    }
}

2.3 do-while

Kotlin 复制代码
fun main() {
    var i = 0
    do {
        println(i)
        i++
    } while (i < 5)
}

2.4 continue

使用 continue 语句,可以跳过循环体中 continue 后面的语句,继续执行下一轮循环。

1)单层循环

Kotlin 复制代码
fun main() {
    for (i in 1..5) {
        if (i == 3) continue
        println(i) // 打印: 1、2、4、5
    }
}

2)多层循环

Kotlin 复制代码
fun main() {
    label@ for (i in 1..3) {
        for (j in 4..6) {
            if (j == 5) continue@label
            println("($i,$j)") // 打印: (1,4)、(2,4)、(3,4)
        }
    }
}

说明:label 可以修改为任何符合变量命名规范的名字。

2.5 break

使用 break 语句,可以跳出循环体,继续执行循环体后面的语句。

1)单层循环

Kotlin 复制代码
fun main() {
    for (i in 1..5) {
        if (i == 3) break
        println(i) // 打印: 1、2
    }
}

2)多层循环

Kotlin 复制代码
fun main() {
    label@ for (i in 1..3) {
        for (j in 4..6) {
            if (j == 5) break@label
            println("($i,$j)") // 打印: (1,4)
        }
    }
}

说明:label 可以修改为任何符合变量命名规范的名字。

相关推荐
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker1 天前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker2 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z4 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton5 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream5 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam5 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker5 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc6 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景6 天前
kotlin协程学习小计
android·kotlin