使用 while 循环
计算机非常适合处理重复的任务。
最基本的重复形式使用 while 关键字。这会根据控制的布尔表达式是否为 true 来重复一个代码块:
while (布尔表达式) {
// 要重复的代码
}
布尔表达式在循环开始时被评估一次,然后在每次进入代码块之前再次评估。
// RepetitionWithWhile/WhileLoop.kt
fun condition(i: Int) = i < 100 // [1]
fun main() {
var i = 0
while (condition(i)) { // [2]
print(".")
i += 10 // [3]
}
}
/* 输出:
..........
*/
- [1] 比较运算符
<产生一个布尔结果,因此 Kotlin 推断condition()的结果类型为布尔。 - [2]
while的条件表达式表示:“只要condition()返回true,就重复执行代码块中的语句。” - [3]
+=运算符将10添加到i并将结果赋值给i(i必须是var才能这样工作)。这等效于:
i = i + 10
还有一种使用 while 的方式,与 do 关键字一起使用:
do {
// 要重复的代码
} while (布尔表达式)
将 WhileLoop.kt 重写为使用 do-while 会产生:
// RepetitionWithWhile/DoWhileLoop.kt
fun main() {
var i = 0
do {
print(".")
i += 10
} while (condition(i))
}
/* 输出:
..........
*/
while 和 do-while 之间的唯一区别在于,do-while 的代码块始终至少执行一次,即使布尔表达式最初产生 false。在 while 循环中,如果条件在第一次时为 false,则代码块永远不会执行。在实践中,do-while 比 while 更少见。
所有算术操作都可以使用短版的赋值运算符:+=、-=、*=、/= 和 %=。这里使用了 -= 和 %=:
// RepetitionWithWhile/AssignmentOperators.kt
fun main() {
var n = 10
val d = 3
print(n)
while (n > d) {
n -= d
print(" - $d")
}
println(" = $n")
var m = 10
print(m)
m %= d
println(" % $d = $m")
}
/* 输出:
10 - 3 - 3 - 3 = 1
10 % 3 = 1
*/
为了计算两个自然数的整数除法的余数,我们首先使用了 while 循环,然后使用了余数运算符。
将一个数加 1 和减 1 是如此常见,以至于它们都有自己的增量和减量运算符:++ 和 --。你可以将 i += 1 替换为 i++:
// RepetitionWithWhile/IncrementOperator.kt
fun main() {
var i = 0
while (i < 4) {
print(".")
i++
}
}
/* 输出:
....
*/
实际上,while 循环不常用于遍历一系列数字。取而代之的是使用 for 循环。这将在下一个部分中介绍。
练习和解答可在 www.AtomicKotlin.com 找到。