Gyakorlati alapok

Dönteni kell! (do - while)

 

A for ciklus használatához valójában nincs szükség semmilyen további eldöntendő dologra, eseményre. Ha a ciklust működtető fejléc adatait (és persze a ciklus kódjait) jól adtuk meg...

 

for (i = kezdőérték; i <= végérték; léptetés)

 

...akkor az biztosan és korrekt módon le fog futni. Például írjuk ki a konzolra ötször a "Hello World!" üdvözletet:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    for(int i = 1; i <= 5; i++){
        System.out.println("Hello World!");
        }
    }
}

 

Végertedmény:

Hello World!

Hello World!

Hello World!

Hello World!

Hello World!
 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Ezzel ellentétben a do while ciklusok kizárólag akkor indulnak be vagy addig tartanak, amíg a beállított feltételek teljesülnek.

 

A do while kifejezést leginkább "Csináld, amely alatt (feltételváltozás)..." mondattal lehetne lefordítani.

 

Kétféle do while ciklusból válogathatunk:

A háromféle ciklus különböző működését (for, elöltesztelő és hátultesztelő) a faktoriális-számításon keresztül mutatjuk meg.

 

Kis matematikai előzmény: faktoriális-számítások főleg a kombinatorikában fordulnak elő, amely olyan kérdésekkel foglalkozik: például 12 db biliárdlyukba hányféleképpen tehetünk 7 db golyót úgy, hogy 1 lyukba nem teszünk 1-nél többet?

 

Jelölése a "!" jel, például 5! = 120, ahol 5! = 1 x 2 x 3 x 4 x 5.

 

Először nézzük meg a számítást for ciklussal:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    int eredmeny = 1;
    for(int i = 1; i <= 5; i++){
        eredmeny *= i;
    }
    System.out.println(eredmeny);
    }
}

 

Végeredmény:

120
 

Az alábbi elöltesztelő ciklus (ekkor csak while szót + feltételt + blokk-zárójeleket /{}/ használunk) csakis azért fut le, mert a beállított futási feltétel megfelelő (i  <= 5). Ha i kezdeti értéke nem 1 lenne, hanem mondjuk nagyobb 5-nél (i > 5), akkor soha nem lépnénk be a ciklusba. Illetve i értékét a cikluson belül növelnünk is kell (i++).

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    int eredmeny = 1;
    int i = 1;
    while (i <= 5){
        eredmeny *= i;
        i++;
    }
    System.out.println(eredmeny);
    }
}
 

Végeredmény:

120

 

A hátultesztelésnél a ciklus egyszer mindenképpen lefut, mert a futási feltétel hátul van tesztelve. Ekkor már használjuk a do szót is. Az i értékét a cikluson belül szintén növelnünk kell (i++):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    int eredmeny = 1;
    int i = 1;
    do{
        eredmeny *= i;
        i++;
    }while (i <= 5);
    System.out.println(eredmeny);
    }
}

 

Végeredmény:

120
 

A fenti 3 példából jól látható, hogy egyetlen feladat elvégzése általában többféleképpen is lehetséges, adott tehát a kérdés, hogy melyiket válasszuk?

 

Az optimális eljárás mindig "feladatspecifikus", azaz mindig az adott feladat jellege határozza meg. A fenti példákban az elöltesztelő volt a legkevésbé hatékony, hiszen egyszerűen nem volt értelme a ciklus elöltesztelésének (bár így is működött, de programozás-technikailag hiba lenne erre a feladatra ezt választani).

 

A for ciklus és a hátultesztelő nagyjából azonos hatékonyságú, de én személy szerint úgy ítélem meg, hogy mivel ebben a matematikai feladatban valójában nincs külső feltétel, ezért a legtisztább eljárás a for ciklus használata.

 

Általánosságban kijelenthetjük, hogy fontos, külső feltételek várása-teljesülése esetén elöl-, vagy hátultesztelő ciklust, szimpla iteráció esetében pedig for ciklust érdemes használnunk.