Gyakorlati alapok
Folytassa béka! (a break és a continue utasítás)
A számítógép gyakran dolgozik ismétlődő adatokkal, metódusokkal, ennek során valamilyen tevékenységet ismétel (idegen szóval iterál - iteration) valamennyi ideig vagy addig, amíg valami más meg nem szakítja. Erről részletesen írok a következő fejezetekben:
Tételezzük fel, hogy belekerültünk egy ciklusba, ám egy bizonyos idő vagy valamilyen feltételváltozás hatására ki kéne lépnünk belőle. Ennek szabványos utasításcsomagja a következőképpen néz ki:
if(feltétel){
break;
}
Demonstrációképpen vegyük elő rettegett végtelen ciklusunkat, amely jelenség mindig komoly programozási hibát jelez. A végtelen ciklus elszabadulása megakadályozható egy feltétel és a break utasítás beiktatásával, persze ez nem oldja meg magát a rossz programozást (ettől a végtelen ciklus még végtelen marad), következésképpen:
EZ CSAK DEMONSTRÁCIÓ, NEM PEDIG HIBAMEGOLDÁS!
public class Main {
public static void main(String[] args) {
int a = 100;
for(int i = 0; i < a; i++){
a++;
System.out.println(i);
if(i > 1000000){
break;
}
}
}
}
Végeredmény:
megállás 1000001-nél
A kódból leolvasható, hogy ha i nagyobb lesz 1 milliónál, akkor a végtelen ciklus le fog állni, mert a break hatására kiugrunk a ciklusból (az 1000001 még ki lesz írva).
Nézzünk egy másik, kissé egyszerűbb példát. Az alábbi kódban a for ciklus addig pörög, amíg i < 6, utána azonban a break hatására leáll. Ezt a végeredmény kiírása is igazolja nekünk :
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++){
if(i < 6){
System.out.println(i);
}
else
break;
}
}
}
Végeredmény:
1
2
3
4
5
Hivatalos megfogalmazásban a break utasítás feltétel nélküli vezérlésátadást jelent. A continue feltétel esetén azonban a ciklus futása ugyan megszakad, de a vezérlés a léptetőérték növelésével (általában i++) a ciklus elejére ugrik, majd onnan folytatódik.
if(feltétel){
continue;
}
Az alábbi végtelen ciklusba az if else utasításokkal egy 2 ajtós választási lehetőség lett beiktatva. Az egyikbe a ciklusnak mindenképpen be kell lépnie. Az egyetlen beállított feltétel (1. ajtó), hogy i kisebb a-nál (i < a). A 2. ajtón csakis kizárólag akkor lép be, ha ez a feltétel már nem teljesül, ekkor a ciklus futása is megáll (break). Látható tehát, hogy amíg a feltétel igaz, az else ág soha nem fut le:
public class Main {
public static void main(String[] args) {
int a = 1000000;
for(int i = 0; i < i + 1; i++){
System.out.println(i);
if(i < a){
continue;
}
else
break;
}
}
}
}
Végeredmény:
megállás 1000000-nál
Zárógondolatként fontos megjegyeznünk, hogy sem a break, sem a continue nem használható fel önálló metódusból vagy inicializáló blokkból való kilépéshez. Bármelyik esetet erőltetve fordítási hibával fogunk szembesülni.
Házi feladat - Az ismertetett vezérlő utasítások esetleges felhasználásával találjuk meg a 3-mal VAGY 5-tel osztható számokat és töltsük bele egy 10 elemű tömbbe!
A megoldás fejezete a képre kattintva érhető el.