Ce face while și do-while
while verifică condiția înaintea fiecărei repetări: dacă e falsă de la început, blocul nu se execută deloc. Îl folosești când nu știi dinainte câte pași vor fi, de exemplu cât timp mai sunt cifre într-un număr sau cât timp utilizatorul nu a scris „gata”.
do { ... } while (conditie) verifică condiția după bloc, deci blocul se execută cel puțin o dată. Este potrivit pentru meniuri și pentru citiri repetate: întâi citești, apoi decizi dacă mai continui. Variabilele declarate în blocul do pot fi folosite în condiția de după while.
Ai grijă ca ceva din bloc să facă la un moment dat condiția falsă; altfel bucla nu se oprește. Poți ieși oricând cu break. Bucla infinită se scrie while (true) { ... }.
Exemple
Exemplul 1: Suma cifrelor unui număr
Nu știm câte cifre are numărul, deci folosim while: repetăm cât timp mai rămân cifre.
fun main() {
var n = 2026
var suma = 0
while (n > 0) {
suma += n % 10
n /= 10
}
println("Suma cifrelor lui 2026 este $suma")
var sold = 1000.0
var luni = 0
while (sold < 1200) {
sold *= 1.02
luni++
}
println("Cu 2% pe lună, 1000 lei depășesc 1200 lei după $luni luni")
}
Rezultat
Suma cifrelor lui 2026 este 10
Cu 2% pe lună, 1000 lei depășesc 1200 lei după 10 luni
Exemplul 2: Citire repetată cu do-while
Programul citește numere până primește 0. Blocul se execută cel puțin o dată, iar numar este declarat în do și folosit în condiție.
fun main() {
var total = 0
do {
print("Preț produs (0 = gata): ")
val numar = readln().trim().toInt()
total += numar
println()
} while (numar != 0)
println("Total de plată: $total lei")
}
Ce scrie utilizatorul (intrare)
12
30
8
0
Rezultat
Preț produs (0 = gata):
Preț produs (0 = gata):
Preț produs (0 = gata):
Preț produs (0 = gata):
Total de plată: 50 lei
Exemplul 3: while și do-while cu condiția falsă de la început
Condiția este falsă din start: while nu execută nimic, do-while execută blocul o dată.
fun main() {
val stoc = 0
while (stoc > 0) {
println("while: vând un produs")
}
do {
println("do-while: afișez meniul o dată, chiar dacă stocul e $stoc")
} while (stoc > 0)
}
Rezultat
do-while: afișez meniul o dată, chiar dacă stocul e 0
Greșeli frecvente
- Uitarea actualizării variabilei din condiție (
n /= 10): bucla nu se mai termină. - Folosirea lui
whilecând știi numărul de pași:for (i in 1..n)este mai scurt și nu poți uita incrementarea. - Declararea în afara buclei a variabilei citite doar ca s-o folosești în condiție: în
do-whilevariabilele din bloc sunt vizibile în condițiawhile.
Comenzi înrudite
for: Parcurge pe rând elementele unei colecții, ale unui interval sau ale oricărui obiect care are iterator().break și continue: break oprește bucla curentă; continue sare la pasul următor. Cu etichete (nume@) pot opri o buclă exterioară.if și else: Execută un bloc doar dacă o condiție este adevărată; în Kotlin if este și expresie, deci întoarce o valoare.