Kotlin 中选择结构主要包含 if -else、when 语句,并且可以返回结果。
fun main() {
var score = 85
if (score >= 90) {
println("优秀")
} else if (score >= 80) {
println("良好")
} else if (score >= 60) {
println("及格")
} else {
println("不及格")
}
}
说明:如果 {} 里只有一条语句,可以省略 {},if-else 语句可以嵌套使用,其他流程控制语句也可以嵌套使用。
if-else 语句也可以作为结果判断。
1)单行案例
fun main() {
var score = 85
var res = if (score > 60) "及格" else "不及格"
}
2)多行案例
fun main() {
var score = 85
var res = if (score > 60) {
println("恭喜您通过考试")
"及格"
} else {
println("欢迎下次光临")
"不及格"
}
println(res) // 及格
}
打印结果如下。
说明:返回结果需要放在 {} 中的最后一行,否则返回的是 Unit。
when 语句与 Java 中 switch 语句类似。
1)简单案例
fun main() {
var grade = 'B'
when(grade) {
'A' -> {
println("优秀")
}
'B' -> {
println("良好")
}
'C' -> {
println("及格")
}
else -> {
println("不及格")
}
}
}
说明:如果 {} 里只有一条语句,可以省略 {}。
2)多分支合并
fun main() {
var grade = 'B'
when(grade) {
'A','B','C' -> println("及格")
else -> println("不及格")
}
}
when 语句也可以作为结果判断。
1)简单案例
fun main() {
var grade = 'B'
var res = when(grade) {
'A' -> {
println("你真棒")
"优秀"
}
else -> {
println("加油")
"及格"
}
}
println(res)
}
打印结果如下。
说明:返回结果需要放在 {} 中的最后一行,否则返回的是 Unit。
2)范围分支
fun main() {
var score = 85
var res = when(score) {
in 90..100 -> "优秀"
in 80..<90 -> "良好"
in 60..<80 -> "良好"
else -> "不及格"
}
println(res) // "良好"
}
Kotlin 中循环结构主要包含 for、while、do-while 循环结构。另外,continue 语句可以控制跳过某次循环,break 语句可以控制跳出循环体。
for 循环可以对任何提供迭代器(iterator)的对象进行遍历。
1)遍历整数范围(IntRange、IntProgression)
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)遍历数组 / 列表
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
}
}
fun main() {
var i = 0
while(i < 5) {
println(i)
i++
}
}
fun main() {
var i = 0
do {
println(i)
i++
} while (i < 5)
}
使用 continue 语句,可以跳过循环体中 continue 后面的语句,继续执行下一轮循环。
1)单层循环
fun main() {
for (i in 1..5) {
if (i == 3) continue
println(i) // 打印: 1、2、4、5
}
}
2)多层循环
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 可以修改为任何符合变量命名规范的名字。
使用 break 语句,可以跳出循环体,继续执行循环体后面的语句。
1)单层循环
fun main() {
for (i in 1..5) {
if (i == 3) break
println(i) // 打印: 1、2
}
}
2)多层循环
fun main() {
label@ for (i in 1..3) {
for (j in 4..6) {
if (j == 5) break@label
println("($i,$j)") // 打印: (1,4)
}
}
}
说明:label 可以修改为任何符合变量命名规范的名字。