Ce face for
for are trei părți între paranteze, separate prin ;: inițializarea (se execută o dată, la început), condiția (se verifică înaintea fiecărei iterații) și pasul (se execută după fiecare iterație). Bucla se oprește când condiția devine falsă.
Variabila declarată în inițializare (int i) există doar în buclă. Oricare dintre cele trei părți poate lipsi: for (;;) este o buclă infinită, oprită cu break. Inițializarea și pasul pot conține mai multe expresii separate prin virgulă.
Pentru a parcurge toate elementele unui array sau ale unei colecții, fără indice, bucla for-each (for (int nota : note)) este mai simplă.
Exemple
Exemplul 1: Numărare și sumă
Prima buclă crește din 2 în 2; a doua numără înapoi. Suma numerelor de la 1 la 100 este 5050.
public class Main {
public static void main(String[] args) {
for (int i = 0; i <= 10; i += 2) {
System.out.print(i + " ");
}
System.out.println();
for (int i = 5; i >= 1; i--) {
System.out.print(i + "... ");
}
System.out.println("start!");
int suma = 0;
for (int i = 1; i <= 100; i++) {
suma += i;
}
System.out.println("1 + 2 + ... + 100 = " + suma);
}
}
Rezultat
0 2 4 6 8 10
5... 4... 3... 2... 1... start!
1 + 2 + ... + 100 = 5050
Exemplul 2: Bucle imbricate: tabla înmulțirii
Bucla interioară se execută complet pentru fiecare pas al buclei exterioare. %4d aliniază numerele pe 4 caractere.
public class Main {
public static void main(String[] args) {
for (int r = 1; r <= 5; r++) {
for (int c = 1; c <= 5; c++) {
System.out.printf("%4d", r * c);
}
System.out.println();
}
}
}
Rezultat
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Exemplul 3: Două variabile în același for
Inițializarea și pasul pot avea mai multe expresii, separate prin virgulă. Aici doi indici se apropie din capete, ca să verifice dacă un cuvânt este palindrom.
public class Main {
static boolean palindrom(String cuvant) {
String s = cuvant.toLowerCase();
for (int st = 0, dr = s.length() - 1; st < dr; st++, dr--) {
if (s.charAt(st) != s.charAt(dr)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
for (String c : new String[] {"Cojoc", "rotor", "Iași", "capac"}) {
System.out.println(c + ": " + palindrom(c));
}
}
}
Rezultat
Cojoc: true
rotor: true
Iași: false
capac: true
Greșeli frecvente
for (int i = 0; i <= n; i++)când ai nevoie denpași: rezultăn + 1pași (eroare „off by one”).- Punct și virgulă după paranteză:
for (...);face bucla goală, iar blocul de după se execută o singură dată. - Folosirea variabilei
idupă buclă: ea nu mai există acolo.
Comenzi înrudite
Iteratori și for-each: for-each parcurge pe rând elementele unui array sau ale oricărui Iterable; un Iterator permite și ștergerea în timpul parcurgerii.while și do-while: while repetă un bloc cât timp condiția este adevărată; do-while execută blocul o dată și abia apoi verifică condiția.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.Array-uri: Un array păstrează un număr fix de elemente de același tip, accesate prin indice de la 0 la length – 1.