for în Java

Bucla clasică cu contor: inițializare, condiție verificată înaintea fiecărui pas și actualizare după fiecare pas.

Sintaxă
for (initializare; conditie; pas) {
    // ...
}

for (int i = 0; i < n; i++) { ... }

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 de n pași: rezultă n + 1 paș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 i după 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.