使用 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 找到。