Kotlin 循环控制 #
一、break 语句 #
1.1 基本用法 #
break 用于立即终止循环:
kotlin
for (i in 1..10) {
if (i == 5) break
println(i)
}
// 输出: 1, 2, 3, 4
1.2 在 while 中使用 #
kotlin
var i = 1
while (true) {
println(i)
if (i >= 5) break
i++
}
// 输出: 1, 2, 3, 4, 5
1.3 查找元素 #
kotlin
val numbers = listOf(1, 3, 5, 7, 9, 2, 4, 6, 8)
var firstEven = -1
for (num in numbers) {
if (num % 2 == 0) {
firstEven = num
break
}
}
println("第一个偶数: $firstEven") // 2
二、continue 语句 #
2.1 基本用法 #
continue 用于跳过当前迭代,继续下一次:
kotlin
for (i in 1..10) {
if (i % 2 == 0) continue
println(i)
}
// 输出: 1, 3, 5, 7, 9
2.2 过滤元素 #
kotlin
val words = listOf("apple", "", "banana", "", "cherry")
for (word in words) {
if (word.isEmpty()) continue
println(word)
}
// 输出: apple, banana, cherry
2.3 处理数据 #
kotlin
val numbers = listOf(1, -2, 3, -4, 5, -6)
var sum = 0
for (num in numbers) {
if (num < 0) continue // 跳过负数
sum += num
}
println("正数之和: $sum") // 9
三、标签 #
3.1 定义标签 #
标签使用 @ 后缀定义:
kotlin
outer@ for (i in 1..3) {
for (j in 1..3) {
println("i=$i, j=$j")
}
}
3.2 标签 break #
跳出指定层级的循环:
kotlin
outer@ for (i in 1..3) {
for (j in 1..3) {
if (i == 2 && j == 2) break@outer
println("i=$i, j=$j")
}
}
// 输出:
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1
3.3 标签 continue #
跳到指定层级的下一次迭代:
kotlin
outer@ for (i in 1..3) {
for (j in 1..3) {
if (j == 2) continue@outer
println("i=$i, j=$j")
}
}
// 输出:
// i=1, j=1
// i=2, j=1
// i=3, j=1
3.4 多层嵌套 #
kotlin
loop1@ for (i in 1..3) {
loop2@ for (j in 1..3) {
loop3@ for (k in 1..3) {
if (i == 2 && j == 2 && k == 2) break@loop1
println("i=$i, j=$j, k=$k")
}
}
}
四、return 语句 #
4.1 基本用法 #
return 用于从函数返回:
kotlin
fun findElement(list: List<Int>, target: Int): Int {
for ((index, value) in list.withIndex()) {
if (value == target) {
return index
}
}
return -1
}
4.2 标签 return #
在 lambda 中使用标签 return:
kotlin
val list = listOf(1, 2, 3, 4, 5)
list.forEach lit@{
if (it == 3) return@lit // 跳过 3,继续处理
println(it)
}
// 输出: 1, 2, 4, 5
4.3 隐式标签 #
使用函数名作为隐式标签:
kotlin
fun processList(list: List<Int>) {
list.forEach {
if (it == 3) return@forEach // 等同于 continue
println(it)
}
println("处理完成")
}
4.4 return vs return@label #
kotlin
fun example() {
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return // 直接返回整个函数
println(it)
}
println("这行不会执行")
}
fun example2() {
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return@forEach // 只跳过当前迭代
println(it)
}
println("这行会执行")
}
五、在 forEach 中控制循环 #
5.1 模拟 break #
kotlin
val list = listOf(1, 2, 3, 4, 5)
// 使用 takeWhile 模拟 break
list.takeWhile { it != 4 }.forEach {
println(it)
}
// 输出: 1, 2, 3
5.2 模拟 continue #
kotlin
val list = listOf(1, 2, 3, 4, 5)
// 使用 filter 模拟 continue
list.filter { it != 3 }.forEach {
println(it)
}
// 输出: 1, 2, 4, 5
5.3 使用 run 和 return #
kotlin
val list = listOf(1, 2, 3, 4, 5)
run {
list.forEach {
if (it == 4) return@run // 跳出 run 块
println(it)
}
}
// 输出: 1, 2, 3
六、实战示例 #
6.1 查找二维数组元素 #
kotlin
fun findIn2DArray(matrix: Array<IntArray>, target: Int): Pair<Int, Int>? {
outer@ for (i in matrix.indices) {
for (j in matrix[i].indices) {
if (matrix[i][j] == target) {
return Pair(i, j)
}
}
}
return null
}
6.2 验证输入 #
kotlin
fun validateInputs(inputs: List<String>): Boolean {
inputs.forEach { input ->
if (input.isBlank()) return false
if (input.length > 100) return false
}
return true
}
6.3 处理嵌套数据 #
kotlin
data class Department(val name: String, val employees: List<String>)
fun findEmployee(departments: List<Department>, name: String): String? {
departments.forEach dept@{ dept ->
dept.employees.forEach emp@{ emp ->
if (emp == name) {
return "${dept.name}: $emp"
}
}
}
return null
}
6.4 游戏循环 #
kotlin
fun gameLoop() {
game@ while (true) {
val input = readInput()
when {
input == "quit" -> break@game
input == "pause" -> {
pause@ while (true) {
val pauseInput = readInput()
when {
pauseInput == "resume" -> break@pause
pauseInput == "quit" -> break@game
}
}
}
else -> processInput(input)
}
}
}
七、最佳实践 #
7.1 避免过度使用标签 #
kotlin
// 不推荐:复杂的标签跳转
outer@ for (i in 1..10) {
inner@ for (j in 1..10) {
if (condition1) continue@outer
if (condition2) break@inner
if (condition3) break@outer
}
}
// 推荐:使用函数封装
fun processMatrix(matrix: Array<IntArray>): Boolean {
for (row in matrix) {
if (!processRow(row)) return false
}
return true
}
7.2 使用函数式替代 #
kotlin
// 不推荐
var found = false
for (item in list) {
if (item == target) {
found = true
break
}
}
// 推荐
val found = list.any { it == target }
7.3 提前返回 #
kotlin
// 不推荐
fun process(data: String?): String {
var result = ""
if (data != null) {
if (data.isNotEmpty()) {
result = data.uppercase()
}
}
return result
}
// 推荐
fun process(data: String?): String {
if (data.isNullOrEmpty()) return ""
return data.uppercase()
}
八、总结 #
循环控制语句:
| 语句 | 用途 | 作用范围 |
|---|---|---|
break |
跳出循环 | 当前循环 |
continue |
跳过当前迭代 | 当前循环 |
break@label |
跳出指定循环 | 标签指定的循环 |
continue@label |
跳到指定循环的下一次迭代 | 标签指定的循环 |
return |
从函数返回 | 整个函数 |
return@label |
从 lambda 返回 | 标签指定的 lambda |
下一步,让我们学习 函数基础!
最后更新:2026-03-27