Kotlin While循环
外观
Kotlin While循环是控制流中的基本结构之一,允许在满足特定条件时重复执行代码块。与`for`循环不同,`while`循环不依赖集合或范围,而是基于布尔表达式动态控制循环的执行。本章将详细介绍`while`和`do-while`循环的语法、工作原理及实际应用。
基本语法[编辑 | 编辑源代码]
Kotlin提供了两种`while`循环变体:
- `while`循环:先检查条件,再执行循环体。
- `do-while`循环:先执行循环体,再检查条件(至少执行一次)。
`while`循环[编辑 | 编辑源代码]
语法格式如下:
while (condition) {
// 循环体代码
}
执行流程: 1. 检查条件是否为`true`。 2. 若为`true`,执行循环体,然后返回步骤1;否则退出循环。
示例:计算1到5的和
fun main() {
var sum = 0
var i = 1
while (i <= 5) {
sum += i
i++
}
println("Sum: $sum") // 输出: Sum: 15
}
`do-while`循环[编辑 | 编辑源代码]
语法格式如下:
do {
// 循环体代码
} while (condition)
关键区别:循环体至少执行一次,即使条件初始为`false`。
示例:用户输入验证
fun main() {
var input: String
do {
print("Enter 'quit' to exit: ")
input = readLine() ?: ""
} while (input != "quit")
}
循环控制语句[编辑 | 编辑源代码]
- `break`:立即退出整个循环。
- `continue`:跳过当前迭代,进入下一次循环检查。
示例:在`while`循环中使用`break`
fun main() {
var x = 0
while (x++ < 100) {
if (x == 5) break
println(x)
}
// 输出: 1 2 3 4
}
实际应用场景[编辑 | 编辑源代码]
场景1:游戏循环[编辑 | 编辑源代码]
在游戏开发中,`while`循环常用于主游戏循环:
var isGameRunning = true
while (isGameRunning) {
updateGameState()
renderGraphics()
isGameRunning = checkPlayerStatus()
}
场景2:数据处理[编辑 | 编辑源代码]
读取文件直到结束:
val reader = File("data.txt").bufferedReader()
var line: String?
while (reader.readLine().also { line = it } != null) {
processLine(line!!)
}
数学表达与循环[编辑 | 编辑源代码]
`while`循环可用于实现数值逼近算法,如计算平方根(牛顿迭代法):
fun sqrt(S: Double): Double {
var x = S
var prev = 0.0
while (Math.abs(x - prev) > 1e-6) {
prev = x
x = 0.5 * (x + S / x)
}
return x
}
常见问题[编辑 | 编辑源代码]
问题 | 解决方案 |
---|---|
无限循环 | 确保循环条件最终变为`false` |
未初始化变量 | 在循环外正确初始化控制变量 |
逻辑错误 | 使用`println`调试循环变量 |
性能考虑[编辑 | 编辑源代码]
- 避免在循环条件中执行复杂计算(如函数调用),应预先计算或缓存结果。
- 对于确定次数的迭代,优先使用`for`循环。
进阶技巧[编辑 | 编辑源代码]
- 结合标签实现嵌套循环控制:
outer@ while (condition1) {
while (condition2) {
if (check()) break@outer
}
}
- 使用`generateSequence`实现函数式替代:
generateSequence(1) { it + 1 }
.takeWhile { it <= 100 }
.forEach { println(it) }