Ce face while și do-while
while verifică condiția înaintea fiecărei iterații. Dacă este falsă de la început, blocul nu se execută deloc. Se folosește când nu știi dinainte câți pași vor fi: citești până la finalul datelor, aștepți o condiție, repeți până la o anumită valoare.
do { ... } while (conditie); execută blocul înainte de verificare, deci cel puțin o dată. Este potrivit pentru meniuri și pentru citiri repetate până la o valoare validă. Observă ; de la final.
Corpul buclei trebuie să schimbe ceva din condiție, altfel bucla nu se oprește niciodată. Din orice buclă poți ieși mai devreme cu break.
Exemple
Exemplul 1: Economii până la o țintă
Nu se știe dinainte câte luni sunt necesare, deci while este mai potrivit decât for.
public class Main {
public static void main(String[] args) {
double economii = 0;
double tinta = 5000;
int luni = 0;
while (economii < tinta) {
economii += 450;
economii *= 1.004; // dobândă lunară
luni++;
}
System.out.printf("După %d luni: %.2f lei%n", luni, economii);
int n = 0;
while (n > 0) {
System.out.println("nu se afișează niciodată");
}
System.out.println("while cu condiție falsă de la început: 0 pași");
}
}
Rezultat
După 11 luni: 5070.40 lei
while cu condiție falsă de la început: 0 pași
Exemplul 2: do-while: citire până la o valoare validă
Programul cere o notă până primește una între 1 și 10. Prima citire are loc înainte de orice verificare, de aceea do-while este natural aici.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int nota;
do {
System.out.print("Nota (1-10): ");
nota = in.nextInt();
System.out.println(nota);
} while (nota < 1 || nota > 10);
System.out.println("Nota acceptată: " + nota);
}
}
Ce scrie utilizatorul (intrare)
12
-3
9
Rezultat
Nota (1-10): 12
Nota (1-10): -3
Nota (1-10): 9
Nota acceptată: 9
Exemplul 3: Cifrele unui număr
% 10 dă ultima cifră, iar / 10 o elimină. Bucla se oprește când numărul ajunge la 0.
public class Main {
public static void main(String[] args) {
int numar = 2026;
int copie = numar;
int suma = 0;
int cifre = 0;
while (copie > 0) {
suma += copie % 10;
copie /= 10;
cifre++;
}
System.out.println(numar + " are " + cifre + " cifre cu suma " + suma);
}
}
Rezultat
2026 are 4 cifre cu suma 10
Greșeli frecvente
- Bucla infinită: uiți să schimbi variabila din condiție (
luni++lipsă). while (conditie);cu punct și virgulă după paranteză: bucla are corpul gol și, dacă condiția e adevărată, nu se oprește.- Uitarea lui
;dupăwhile (...)la do-while: nu compilează.
Comenzi înrudite
for: Bucla clasică cu contor: inițializare, condiție verificată înaintea fiecărui pas și actualizare după fiecare pas.break și continue: break oprește bucla (sau switch-ul) curentă; continue sare peste restul pasului curent; cu etichete acționează asupra unei bucle exterioare.boolean: Tipul pentru valori logice: true sau false. Condițiile din if, while și for trebuie să fie boolean.