Wiederholung mit while
Computer sind ideal für sich wiederholende Aufgaben.
Die grundlegendste Form der Wiederholung verwendet das Schlüsselwort while. Dies wiederholt einen Block, solange der kontrollierende boolesche Ausdruck true ist:
while (Boolean-expression) {
// Code to be repeated
}
Der boolesche Ausdruck wird einmal zu Beginn der Schleife und erneut vor jeder weiteren Iteration durch den Block ausgewertet.
// RepetitionWithWhile/WhileLoop.kt
fun condition(i: Int) = i < 100 // [1]
fun main() {
var i = 0
while (condition(i)) { // [2]
print(".")
i += 10 // [3]
}
}
/* Output:
..........
*/
-
[1] Der Vergleichsoperator
<liefert einBoolescher WertErgebnis, daher leitet KotlinBoolescher Wertals Ergebnistyp fürcondition()ab. -
[2] Der bedingte Ausdruck für das
whilebesagt: “Wiederhole die Anweisungen im Körper, solangecondition()truezurückgibt.” -
[3] Der
+=Operator addiert10zuiund weist das Ergebnisiin einem einzigen Vorgang zu (imuss einevarsein, damit dies funktioniert). Dies entspricht:
i = i + 10
Es gibt eine zweite Möglichkeit, while in Verbindung mit dem Schlüsselwort do zu verwenden:
do {
// Code to be repeated
} while (Boolean-expression)
Das Umschreiben von WhileLoop.kt, um eine do-while-Schleife zu verwenden, ergibt:
// RepetitionWithWhile/DoWhileLoop.kt
fun main() {
var i = 0
do {
print(".")
i += 10
} while (condition(i))
}
/* Output:
..........
*/
Der einzige Unterschied zwischen while und do-while besteht darin, dass der Körper von do-while immer mindestens einmal ausgeführt wird, selbst wenn der boolesche Ausdruck anfänglich false ergibt. Bei einem while wird der Körper nie ausgeführt, wenn die Bedingung beim ersten Mal false ist. In der Praxis ist do-while weniger verbreitet als while.
Die Kurzformen der Zuweisungsoperatoren sind für alle arithmetischen Operationen verfügbar: +=, -=, *=, /=, und %=. Hier werden -= und %= verwendet:
// 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")
}
/* Output:
10 - 3 - 3 - 3 = 1
10 % 3 = 1
*/
Um den Rest der ganzzahligen Division von zwei natürlichen Zahlen zu berechnen, beginnen wir mit einer while-Schleife und verwenden dann den Restoperator.
Das Hinzufügen und Subtrahieren von 1 zu einer Zahl ist so häufig, dass sie eigene Inkrement- und Dekrementoperatoren haben: ++ und --. Sie können i += 1 durch i++ ersetzen:
// RepetitionWithWhile/IncrementOperator.kt
fun main() {
var i = 0
while (i < 4) {
print(".")
i++
}
}
/* Output:
....
*/
In der Praxis werden while-Schleifen nicht zum Iterieren über einen Bereich von Zahlen verwendet. Stattdessen wird die for-Schleife verwendet. Dies wird im nächsten Atom behandelt.
Übungen und Lösungen finden Sie unter www.AtomicKotlin.com.