Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

使用 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 并将结果赋值给 ii 必须是 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))
}
/* 输出:
..........
*/

whiledo-while 之间的唯一区别在于,do-while 的代码块始终至少执行一次,即使布尔表达式最初产生 false。在 while 循环中,如果条件在第一次时为 false,则代码块永远不会执行。在实践中,do-whilewhile 更少见。

所有算术操作都可以使用短版的赋值运算符:+=-=*=/=%=。这里使用了 -=%=

// 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 找到。