Kotlin Academy · 课时

while 与 do-while:分别适用于何时

编写 while 和 do-while 循环,并了解它们各自的适用场景。

第 2 / 4 课13 个步骤

while 与 do-while:分别适用于何时 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

两种 while 循环

Kotlin 同时提供 while(前置测试)和 do-while(后置测试)。区别在于:do-while 始终至少执行一次循环体。

基本 while 循环

while 会在每次迭代前检查条件。如果初始条件为假,循环体就永远不会执行。

fun main() {
    var count = 0
    while (count < 3) {
        println("count = $count")
        count++
    }
}

基本 do-while 循环

do-while 会先执行循环体,再检查条件。循环体始终至少执行一次。

fun main() {
    var n = 10
    do {
        println("n = $n")
        n--
    } while (n > 7)
}

读取直到哨兵值

当您不知道需要多少次迭代时,while 循环非常适合使用,例如读取数据直到遇到哨兵值。

fun main() {
    val data = listOf(3, 7, 0, 9)
    var i = 0
    while (i < data.size && data[i] != 0) {
        println("got ${data[i]}")
        i++
    }
    println("stopped at index $i")
}

搜索列表

对于满足条件后立即停止的提前退出搜索,请使用 while。

fun main() {
    val nums = listOf(2, 4, 7, 8, 10)
    var i = 0
    while (i < nums.size && nums[i] % 2 == 0) i++
    println("first odd at index $i = ${nums[i]}") // 2 = 7
}

使用 do-while 验证输入

当您必须先执行操作(提示、读取或尝试),然后才能检查是否成功时,请使用 do-while。

fun main() {
    val validInputs = listOf("y", "n", "y")
    var idx = 0
    var input: String
    do {
        input = validInputs[idx++]
        println("user typed: $input")
    } while (input != "n" && idx < validInputs.size)
}

递减计数器

while 循环可以简洁地处理递减到零的计数器。

fun main() {
    var lives = 3
    while (lives > 0) {
        println("Lives left: $lives")
        lives--
    }
    println("Game over")
}

使用 break 创建无限循环

对于退出条件复杂的事件循环式代码,请使用 while (true) 和 break。

fun main() {
    val items = listOf(1, 2, 3, -1, 4)
    var i = 0
    while (true) {
        if (i >= items.size || items[i] < 0) break
        println("ok: ${items[i]}")
        i++
    }
}

比较 while 和循环

如果您预先知道迭代次数,请优先使用 for。当迭代次数取决于运行时状态时,请使用 while。

fun main() {
    // for: known bounds
    for (i in 1..3) print("$i ")
    println()
    // while: state-driven
    var n = 1
    while (n <= 3) { print("$n "); n++ }
    println()
}

使用两个变量的循环

while 循环可以跟踪多个变量,这对斐波那契数列等算法很有帮助。

fun main() {
    var a = 0
    var b = 1
    while (b < 50) {
        print("$b ")
        val next = a + b
        a = b
        b = next
    }
    println() // 1 1 2 3 5 8 13 21 34
}

do-while 始终执行一次

即使条件从一开始就是假,do-while 的循环体也会执行一次。有时这正是您需要的行为,但有时也可能是一个错误。

fun main() {
    var x = 100
    do {
        println("x = $x") // prints once
        x--
    } while (x > 1000) // false immediately
}

快速检查

无论条件如何,哪个循环都能保证循环体至少执行一次?

回顾

当迭代次数取决于运行时条件时,请使用 while。当循环体必须至少执行一次时(例如验证或重试),请使用 do-while。如果迭代次数已知,请优先使用 for。

免费开始

用 AI 导师学习 Kotlin — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
51
课程
203

常见问题解答

「while 与 do-while:分别适用于何时」课时是免费的吗?

是的 — 「while 与 do-while:分别适用于何时」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「while 与 do-while:分别适用于何时」这节课中我会学到什么?

编写 while 和 do-while 循环,并了解它们各自的适用场景。 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「while 与 do-while:分别适用于何时」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 for 循环遍历范围与集合
  2. while 与 do-while:分别适用于何时
  3. forEach、repeat 与 forEachIndexed
  4. break、continue 与带标签返回
← 返回 Kotlin Academy