Ce face break și continue
break oprește imediat bucla în care se află (for, while, do) sau iese dintr-un switch în forma veche. Execuția continuă cu prima instrucțiune de după buclă.
continue sare peste restul codului din pasul curent și trece la pasul următor: în for se execută pasul (i++), apoi se verifică din nou condiția.
În bucle imbricate, break și continue simple acționează doar asupra buclei interioare. Cu o etichetă (un nume urmat de : pus înaintea buclei exterioare), break eticheta; iese din bucla exterioară. Java nu are goto (cuvântul este rezervat, dar nu se folosește), iar etichetele sunt înlocuitorul controlat.
Exemple
Exemplul 1: Căutare cu break
Bucla se oprește la primul produs prea scump; restul nu mai sunt verificate.
public class Main {
public static void main(String[] args) {
String[] produse = {"pâine", "lapte", "cafea", "ciocolată"};
double[] preturi = {4.5, 7.2, 32.0, 8.9};
double buget = 20;
for (int i = 0; i < produse.length; i++) {
if (preturi[i] > buget) {
System.out.println("Stop: " + produse[i] + " costă " + preturi[i] + " lei");
break;
}
buget -= preturi[i];
System.out.println("Cumpăr " + produse[i] + ", rămân " + buget + " lei");
}
}
}
Rezultat
Cumpăr pâine, rămân 15.5 lei
Cumpăr lapte, rămân 8.3 lei
Stop: cafea costă 32.0 lei
Exemplul 2: Sărirea elementelor cu continue
Notele lipsă (0) sunt sărite cu continue și nu intră în medie.
public class Main {
public static void main(String[] args) {
int[] note = {9, 0, 8, 10, 0, 7};
int suma = 0, numar = 0;
for (int nota : note) {
if (nota == 0) {
continue; // notă lipsă
}
suma += nota;
numar++;
}
System.out.println(numar + " note, media " + (double) suma / numar);
}
}
Rezultat
4 note, media 8.5
Exemplul 3: Etichetă pentru bucle imbricate
break cautare iese din ambele bucle când găsește primul loc liber. Fără etichetă, ar ieși doar din bucla interioară și ar continua cu rândul următor.
public class Main {
public static void main(String[] args) {
boolean[][] ocupat = {
{true, true, true},
{true, false, true},
{false, false, false},
};
int rand = -1, loc = -1;
cautare:
for (int r = 0; r < ocupat.length; r++) {
for (int l = 0; l < ocupat[r].length; l++) {
if (!ocupat[r][l]) {
rand = r + 1;
loc = l + 1;
break cautare;
}
}
}
System.out.println("Primul loc liber: rândul " + rand + ", locul " + loc);
}
}
Rezultat
Primul loc liber: rândul 2, locul 2
Greșeli frecvente
breakîntr-o buclă interioară, cu speranța că iese din toate buclele: folosește o etichetă sau mută codul într-o metodă cureturn.continueîntr-unwhileînainte de actualizarea contorului: contorul nu mai crește și bucla devine infinită.breaksaucontinueîn afara unei bucle (de exemplu într-o lambda dinforEach): nu compilează.
Comenzi înrudite
for: Bucla clasică cu contor: inițializare, condiție verificată înaintea fiecărui pas și actualizare după fiecare pas.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.switch, case și default: Alege ce cod se execută comparând o valoare cu mai multe constante case; default tratează orice altă valoare.return și void: return încheie metoda și trimite înapoi o valoare; void marchează o metodă care nu returnează nimic.