嵌套循环

Kotlin没有提供goto语句来控制程序的跳转,这种做法避免了goto语句的滥用。 Kotlin提供了continue、break来控制循环结构,除此之外,使用return可以结束整个方法,相当于结束了整个循环

使用break结束循环

某些时候,需要在某种条件出现时强行中止循环,而不是等到循环条件为false时才跳出循环。
一旦遇到了break,将完全结束循环,开始执行循环之后的代码,例如:

fun main() {
for (i in 1..10) {
println("当前数字: $i")
if (i == 5) {
println("遇到5,结束循环")
break // 一旦执行到这里,循环立即终止
}
}
println("循环结束,继续执行后续代码")
}

当break加上标签时,不仅可以跳出本循环,而且可以跳出整个循环,例如

fun main() {
outer@ for (i in 1..3) { // 外层循环,标签名为 outer
for (j in 1..3) { // 内层循环
println("i = $i, j = $j")
if (i == 2 && j == 2) {
println("触发 break@outer")
break@outer // 跳出 outer 标签对应的循环
}
}
}
println("循环结束")
}

代码解释:

  • 普通 break 只会跳出最内层循环。

  • break@outer 会直接结束外层 outer 循环,相当于结束了整个循环

使用 continue 忽略本次循环的剩下语句

使用continue可以跳过本次循环紧接着开始下一次循环,与break不同的是continue不是完全中止循环
示例

fun main() {
for (i in 1..5) {
if (i == 3) {
continue // 跳过本次循环,直接进入下一次
}
print(i)
}
}
/*
输出:
1245
*/

与break类似,continue后也可以紧跟一个标签,用于跳出标签所标识循环的当次循环的剩下语句 , 重新开始下一次循环

fun main() {
outer@ for (i in 1..3) {
for (j in 1..3) {
if (j == 2) {
continue@outer // 跳过 outer 标签循环的本次迭代
}
println("i = $i, j = $j")
}
}
}
/*
输出:
i = 1, j = 1
i = 2, j = 1
i = 3, j = 1
*/

使用return结束方法

return 用于从最直接包围它的方法、函数或者匿名函数返回 。当函数或方法执行到一条 return 语句时( return 关键字后可以跟变量、常量和表达式,也可什么都不返回),这个函数或方法将被结束。

fun findFirstEven(numbers: List<Int>): Int? {
for (num in numbers) {
if (num % 2 == 0) {
return num // 找到第一个偶数就结束方法,并返回它
}
}
return null // 如果没有找到偶数,返回 null
}

fun main() {
val list = listOf(1, 3, 5, 6, 7, 9)
val result = findFirstEven(list)
if (result != null) {
println("第一个偶数是:$result")
} else {
println("没有找到偶数")
}
}
/*
运行结果:
第一个偶数是:6
*/