Gyakorlati alapok
A programozók rémálma: a kódugrás (a címkék /label/ használata)
Címke (label) + continue
Az előző fejezetben alaposan áttanulmányozhattuk a címkézett break utasítás használati eseteit. Ebben a fejezetben mindezt a continue utasítással kapcsolatban nézzük meg.
Adott egy probléma: egybeágyazott for ciklusokat használunk és a belső ciklusban vizsgálunk feltételeket. Ám teljesülése esetén mégsem akarjuk az egész cikluskört megszakítani, hanem a külső ciklusnak mennie kell tovább.
Vegyünk például 2 db egybeágyazott, 5 körből álló for ciklust, amelyeknek kiírjuk az iterátor értékeit (a külső ciklusban az iterátor int i, a belsőben pedig int j). Legyen a feltétel az, hogy a belső ciklusban nem írhatjuk ki a 2-nél nagyobb iterátor-értékeket (if(j == 2)). A continue siet ebben segítségünkre, hiszen az nem fogja megszakítani a teljes cikluskört, hanem csak a belsőt. Ellenőrizzük le mindezt az alábbi futtatható Java-kódban:
public class Main {
public static void main(String[] args) {
loop:
for(int i = 1; i <= 5; i++) {
System.out.print("i = " + i + " ");
for(int j = 1; j <= 5; j++) {
System.out.print("j = " + j + " ");
if(j == 2) {
System.out.println();
continue loop;
}
}
}
System.out.println("Vége a ciklusnak.");
}
}
Végeredmény:
i = 1 j = 1 j = 2
i = 2 j = 1 j = 2
i = 3 j = 1 j = 2
i = 4 j = 1 j = 2
i = 5 j = 1 j = 2
Vége a ciklusnak.
Jól láthatjuk a continue és break közti működési különbséget: break hatására a legelső if ágba való kerüléskor le fog állni a teljes cikluskör:
public class Main {
public static void main(String[] args) {
loop:
for(int i = 1; i <= 5; i++) {
System.out.print("i = " + i + " ");
for(int j = 1; j <= 5; j++) {
System.out.print("j = " + j + " ");
if(j == 2) {
System.out.println();
break loop;
}
}
}
System.out.println("Vége a ciklusnak.");
}
}
Végeredmény:
i = 1 j = 1 j = 2
Vége a ciklusnak.