ZetCode

Kotlin do 关键字

最后修改于 2025 年 4 月 19 日

Kotlin 的控制流包括 do-while 循环结构,其中 do 起着关键作用。此循环确保代码在检查条件之前至少执行一次。本教程通过实际例子深入探讨 do 关键字。

基本定义

Kotlin 中的 do 关键字用于创建 do-while 循环。与普通的 while 循环不同,do-while 先执行代码块,然后检查条件。这保证至少执行一次迭代。

基本的 do-while 循环

最简单的 do-while 循环形式是在检查条件之前执行一次代码块。如果条件为真,则重复该块。

BasicDoWhile.kt
package com.zetcode

fun main() {

    var i = 0
    
    do {
        println(i)
        i++
    } while (i < 5)
}

此示例打印数字 0 到 4。首先执行循环体,然后检查条件。即使 i 从 5 开始,循环也至少运行一次。

do-while 与假条件

do-while 的一个关键特性是至少执行一次,即使条件最初为假。这与可能根本不运行的 while 不同。

FalseCondition.kt
package com.zetcode

fun main() {

    var flag = false
    
    do {
        println("This runs once")
    } while (flag)
}

尽管 flag 为 false,但该消息打印一次。这演示了在检查条件之前保证执行 do 块。

使用 do-while 进行输入验证

do-while 非常适合需要至少提示一次的输入验证。循环持续进行,直到收到有效输入。

InputValidation.kt
package com.zetcode

fun main() {

    var input: Int?
    
    do {
        print("Enter a positive number: ")
        input = readLine()?.toIntOrNull()
    } while (input == null || input <= 0)
    
    println("You entered: $input")
}

此循环重复提示输入,直到提供正数。do 块确保在检查之前至少出现一次提示。

嵌套的 do-while 循环

do-while 循环可以互相嵌套以处理复杂的迭代场景。每个循环维护自己的条件和迭代逻辑。

NestedDoWhile.kt
package com.zetcode

fun main() {

    var i = 1
    
    do {
        var j = 1
        do {
            print("${i * j}\t")
            j++
        } while (j <= 10)
        
        println()
        i++
    } while (i <= 5)
}

此示例打印从 1 到 5 的乘法表。外循环控制行,而内循环处理列。两个循环都使用 do-while 结构。

带 break 的 do-while

break 语句可以提前退出 do-while 循环。当您需要基于复杂条件停止迭代时,这很有用。

BreakInDoWhile.kt
package com.zetcode

fun main() {

    var num = 0
    
    do {
        num++
        println(num)
        
        if (num == 3) {
            break
        }
    } while (num < 5)
}

此循环通常会打印 1 到 5,但 break 在 3 处退出。输出显示 1、2、3。在 break 之后,条件 num < 5 变得无关紧要。

带 continue 的 do-while

continue 语句跳过 do-while 循环中当前迭代的其余部分。它跳转到条件检查,同时保留循环状态。

ContinueInDoWhile.kt
package com.zetcode

fun main() {

    var i = 0
    
    do {
        i++
        
        if (i % 2 == 0) {
            continue
        }
        
        println(i)
    } while (i < 10)
}

此示例打印 1 到 10 之间的奇数。当 i 为偶数时,continue 跳过打印语句。循环仍然在每次迭代中递增 i

无限 do-while 循环

一个无限 do-while 循环永远运行,除非外部停止。这种模式对于需要持续运行的程序很有用。

InfiniteDoWhile.kt
package com.zetcode

fun main() {

    var count = 0
    
    do {
        println("Running... ${++count}")
        Thread.sleep(1000)
    } while (true)
}

此循环每秒打印一条消息,无限期地进行。在实践中,您会添加一个中断条件或使用 Ctrl+C 来停止它。true 条件确保永久执行。

do-while 的最佳实践

来源

Kotlin 控制流文档

本教程深入介绍了 Kotlin 的 do 关键字,展示了各种 do-while 循环场景。我们探讨了基本用法、输入验证、嵌套和控制语句。当您需要保证第一次迭代时,正确使用 do-while 可以使您的代码更健壮。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有多年的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我写了 1400 多篇文章和 8 本电子书。我拥有超过八年的编程教学经验。

列出 所有 Kotlin 教程