2014. szeptember 22., hétfő

A Java programozási nyelv - ciklusszervezés (iterációk)

Az iterációk megvalósítására szintén a C/C++ megszokott eszközei állnak rendelkezésre. Az iteráció adott utasítás, vagy blokk ciklikus végrehajtása, melyet a ciklusfejben megadott kifejezés vezérel.

Két fő csoport és három konkrét megvalósítás létezik. A számláló ciklus, amit akkor célszerű használni ha megadott számszor kell végrehajtani a ciklusmagot. A másik fajta a tesztelő ciklusok, melyek adott logikai kifejezés alapján hajtódik végre vagy sem a ciklusmag.

A klasszikus iterációs utasítások közül elsőnek az elől tesztelő változatot nézzük:

while (<feltétel>) {
   utasítások;
}

Példaként nézzük a 1-100 közti számok kiíratását:

int i = 1;
while (i<=100) {
   System.out.println(i);
   i++;
}

Először kiértékelődik a feltétel, amennyiben igaz értéket kapunk, úgy végrehajtja a ciklusmagot, különben a while-t lezáró } utáni utasításra kerül a vezérlés. Figyelem! A while ciklus magja lehet hogy egyszer sem hajtódik végre, ugyanis ha első kiértékeléskor hamis lesz a feltétel akkor nem kerül a ciklusmagra a vezérlés!

Ha azt akarjuk hogy a ciklusmag legalább egyszer lefusson, akkor érdemes a hátul tesztelő ciklust választani:

do {
  utasítások;
} while (feltétel);

Nézzük a 1-100 kiírató példát:

int i = 0;
do {
      i++;
      System.out.println(i)
   }
while (i<=100)

Ebben az esetben a ciklusmag egyszer biztosan végrehajtásra kerül, majd utána kerül kiértékelésre a feltétel. Ha igaz értéket ad akkor újra a ciklusmagra kerül a vezérlés és így tovább.
A feltétel tehát a ciklusban maradás feltétele (mind elöl mind hátul tesztelő esetben. Nem minden programozási nyelvben van így)!
A while ciklusoknál mindig figyeljünk arra hogy a ciklust vezérlő feltétel hogyan és mitől változik. Pl. ha nem növeltük volna az i értékét, akkor végtelen ciklusba kerültünk volna!

A számláló ciklust a Java-ban is a for utasítással tudjuk megadni.

for(<ciklusváltozó>;<ciklusfeltétel>;<léptetés>) {
   <utasítások>;
}

Például ha ki akarjuk íratni a számokat 1-től 100-ig, akkor azt a következőképp fogalmazhatjuk meg:

for(int i = 1;i<=100;i++){
   System.out.println(i);
}

Mit látható a ciklusfejben definiáltuk a ciklusváltozót (int i). Ezzel egyértelműen megadtuk, hogy az i változó az csak és kizárólag a ciklusban használatos, a ciklusból kilépve már nem elérhető.

Egy rövid elvi értekezés következik arról, hogy gyakorlatilag a for ciklus is feltétel vezérelt és bármilyen feltételt megfogalmazhatunk a for-ban is, de azt nem arra találták ki. A for ciklust használjuk csak arra amire a jó öreg Basicben, Pascalban is használtuk. Adott számszor hajtassuk vele végre a ciklusmagot!

A ciklusok szervezésével kapcsolatosan még meg kell említeni még két utasítást.
A ciklusmagban a break utasítás hatására a vezérlés azonnal átadódik a ciklus utáni első utasításra. Tehát segítségével feltétel nélkül kiugrunk a ciklusmagból és befejezzük a ciklus végrehajtását is.
A ciklusmagban a continue utasítás hatására a vezérlés a ciklusfejre kerül és kiértékelődik a ciklusfeltétel. Tehát újra megvizsgálásra kerül hogy folytatjuk-e a ciklusmagot vagy sem.


Nincsenek megjegyzések:

Megjegyzés küldése