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.
Ha igaz, akkor végrehajtódik a feltétel utáni tevékenység és a program az if utasítást követő utasításon folytatódik.
Ha a feltétel nem igaz, akkor az else ágban megadott tevékenység hajtódik végre, majd a program az if utasítást követő utasításon folytatódik. Amennyiben nincs else ág, akkor ezt egy üres utasításnak vehetjük.
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.
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.
Ha van egyezés, akkor végrehajtódik az adott ágban megadott tevékenység, majd a program a következő ágakban megadott tevékenységeket is végrehajtja.
Ha nincs egyezés, akkor a default ágban megadott tevékenység hajtódik végre.
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:

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)