6. hét    Elágaztató utasítások

Tartalom:

    6.1. Kétirányú elágaztató utasítás: if..else
    6.2. Többirányú elágaztató utasítás 
        6.2.1.
switch..case
        6.2.2.
else..if
    6.3. Elágaztató utasítások egymásba ágyazása
    6.4. A billentyűzetről bevitt adatok vizsgálata
    6.5. Tesztkérdések
    6.6. Feladatok

 

A program készítése során adódnak olyan helyzetek, ahol a folyamatos utasítás végrehajtás menetét meg kell törnünk, feltételektől függő elágazásokat kell a programba beépítenünk. Így tudjuk megoldani azt a feladatot, hogy ez a program rész csak akkor kerüljön végrehajtásra, ha arra szükség van.

6.1.   Kétirányú elágaztató (feltételes) utasítás: if..else

Két alakjában használhatjuk: rövidalak, ha hiányzik az else ág , egyébként hosszúalakról beszélünk.

Szintaktika:

if(<feltétel>) <utasítás vagy blokk>    : rövidalak

[else <utasítás vagy blokk>]            : hosszúalak, a teljes utasítás

Működési elv:

Először kiértékelődik a feltétel.

Példa:

 

6.2.  Többirányú elágaztató utasítás

Ha olyan feladattal állunk szemben, hogy több tevékenység közül egyet kell kiválasztanunk, akkor a többirányú elágaztató utasítást alkalmazzuk. A Javában ezt kétféle vezérlőszerkezettel tehetjük meg: switch..case és az else..if.

6.2.1    switch..case

Főleg akkor használjuk, ha egy kifejezés jól meghatározott, különböző értékeire szeretnénk bizonyos utasításokat végrehajtani.

Szintaktika:

switch(<kifejezés>){

    case <konstans kifejezés> : <utasítás vagy blokk>

    [case <konstans kifejezés> : <utasítás vagy blokk>]

    ...      

    [default:<utasítás v. {blokk}>]

}

Működési elv:

Először kiértékelődik a kifejezés.

A kifejezés értéke a felírás sorrendjében összehasonlításra kerül a case ágak értékeivel.

Példa:

Output:

 

Ha rögtön ki szeretnénk lépni a switch utasításból az adott tevékenység végrehajtása után, akkor külön utasítást kell alkalmaznunk (break).

Példa:

Output:

 

6.2.2.    else..if
 

Szintaktika:

 

if (<feltétel1>)

    <utasítás . blokk>

else if (<feltétel2>)

    <utasítás v. blokk>

...

else

    <utasítás v. blokk>

A működési elvet az alábbi példa szemlélteti:

A forráskód az előző példában (Menu1) ismertetett végeredményt szolgáltatja. A két kód futtatásának eredménye egyenértékű egymással. A programozótól függ, hogy melyiket használja az adott feladat megoldása során.

 

6.3.   Elágaztató utasítások egymásba ágyazása

Az elágaztató utasítások tetszőlegesen egymásba ágyazhatók. A program áttekinthetősége érdekében célszerű a forrásprogram szerkezetét jól strukturáltan elkészíteni.
Figyeljünk a "csellengő
else"-re! Mit is jelent ez? Ha rövid if-utasításokat írunk, akkor az else-utasítás vajon melyik if-hez tartozik? A Java azt mondja, hogy a legutóbbi if-hez , ha csak blokkok képzésével felül nem bíráljuk ezt.
A probléma másik megoldása az, hogy mindig hosszú
if-utasításokat alkalmazunk.

Nézzük végig példákon keresztül az fent említett eseteket!

(Azt vizsgáljuk, hogy az adott szám belül van-e egy tartományon ([100;1000]) és, ha ott  van, akkor páros vagy páratlan?)

Megtévesztő kód: (Strukturálatlan, hova tartozik az else?)

A kód helyesen strukturálva:

Alakítsuk át úgy, hogy az első if-hez tartozzon az else:

Blokk készítésével oldottuk meg ezt a feladatot.

Próbáljuk meg hosszú if-utasításokkal!

 

6.4.  A billentyűzetről bevitt adatok vizsgálata

A programok készítése során gyakran kerülünk olyan feladat elé, amikor a programnak a továbbhaladáshoz szüksége van a felhasználó beavatkozására, adatokat vár a billentyűzetről. pl. Menü rendszernél a felhasználó választásától függően fog a vezérlés a megfelelő programrészre kerülni.

Hogyan olvassuk be az adatokat a billentyűzetről? Az adatok kezelésével a 9. héten fogunk foglalkozni részletesen, most elégedjünk meg egy kis programrészlettel, aminek a segítségével megoldható a beolvasás problémája.

A kódot másoljuk be a programunkba, a kívánt helyre!

Scanner sc=new Scanner(System.in);

    System.out.println("Kérem a számot!");

    int a=sc.nextInt();

Ne feledkezzünk meg a Scanner osztály importálásáról!

Kattintsunk balgombbal a lámpácskára és válasszuk az Add import for java.util.Scanner opciót:

Példa: (A program a felhasználó választásától függő darabszámú csillagot jelenít meg.)

 

6.5.   Tesztkérdések

6.6.   Feladatok

6.6.1.    Készíts programot, amely bekér egy számot, majd kiírja, hogy osztható-e 2-vel vagy 3-mal! (megoldás)

6.6.2.    Készíts programot, amely bekér két számot és kiírja, hogy melyik a nagyobb illetve ha egyenlők, akkor azt. (megoldás)

6.6.3.    Készíts programot, ami generál két véletlen egész számot [0;100] intervallumban. A nagyobbik számból vonja ki a kisebbet, és írja ki a végeredményt. (megoldás)

6.6.4.    Készíts programot, ami egy számformátumban megadott érdemjegyet szövegesen jelenít meg! Az érdemjegyet a billentyűzeten kell bevinni! (pl. 1 = elégtelen; 2 = elégséges; stb.) (megoldás)

6.6.5.    Készíts programot, ami bekéri egy bankbetét összegét, valamint azt, hogy hány hónapig lesz lekötve az összeg. Majd megjeleníti, hogy mennyi lesz a betét összege a lekötés végén, ha a kamat évi 12%! (megoldás)