Gyakorlati alapok

Csajkovszkij: Évszakok egyszerű adatbekéréssel

 

Ebben a fejezetben a program alapszinten ellenőrzött adatbekérésen keresztül az évszak sorszámából állapítja meg az évszak jellegét (tavasz, nyár, ősz, tél). Természetesen a feladat megoldható rengeteg if else ággal is (Dönteni kell! (if - else) című fejezet), ám ennek leghatékonyabb implementációs módja mégis a switch bevetése (Dönteni kell! (switch) című fejezet). Ehhez hasonló megoldással egyébként már találkozhattunk az említett fejezetben, ahol is a hónap sorszámából állapítottuk meg a hónap nevét. Bevezetésképpen ismételjük meg ezt a futtatható Java-kódot:

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    int sorSzam = 5;
    switch(sorSzam){
        case 1: System.out.println("Január"); break;
        case 2: System.out.println("Február"); break;
        case 3: System.out.println("Március"); break;
        case 4: System.out.println("Április"); break;
        case 5: System.out.println("Május"); break;
        case 6: System.out.println("Június"); break;
        case 7: System.out.println("Július"); break;
        case 8: System.out.println("Augusztus"); break;
        case 9: System.out.println("Szeptember"); break;
        case 10: System.out.println("Október"); break;
        case 11: System.out.println("November"); break;
        case 12: System.out.println("December"); break;
        default: System.out.println("Rossz adatbevitel!"); break;
        }
    }
}

 

Láthatjuk, hogy a kód nem interaktív, azaz nem kommunikál a felhasználóval a hónapsorszám bekérése végett. Ezt az előző fejezetekben ismertetett adatbekérő rutinokkal tudjuk pótolni, illetve tegyünk be egy egyszerű ellenőrzést is: egy hátultesztelő do while ciklus addig nem is engedi továbbfutni a kódot, amíg hónapsorszám (int sorSzam) nincs 1 és 12 között (sorSzam < 1 || sorSzam > 12):

 

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

 

 

 

 

 

 

 

 

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
    int sorSzam = 0;
    Scanner in = new Scanner(System.in);
    do{
        System.out.println("Kérem, hogy adja meg a hónap sorszámát (1 és 12 között)!");
        String honapSorszam = in.nextLine();
        sorSzam = Integer.parseInt(honapSorszam);
    }while(sorSzam < 1 || sorSzam > 12);
    switch(sorSzam){
        case 1:
        case 2: System.out.println("Tél"); break;
        case 3:
        case 4:
        case 5: System.out.println("Tavasz"); break;
        case 6:
        case 7:
        case 8: System.out.println("Nyár"); break;
        case 9:
        case 10:
        case 11: System.out.println("Ősz"); break;
        case 12: System.out.println("Tél"); break;
        default: System.out.println("Rossz adatbevitel!"); break;
        }
    }
}

 

Végeredmény:

Kérem, hogy adja meg a hónap sorszámát (1 és 12 között)!
13
Kérem, hogy adja meg a hónap sorszámát (1 és 12 között)!
0
Kérem, hogy adja meg a hónap sorszámát (1 és 12 között)!
9
Ősz

 

A kód további érdekessége, hogy nem szükséges minden egyes case feltétel mellé utasítást írni. Tehát például case 9 esetén szintén Ősz kiírást kapunk.

 

A kód másik érdekessége pedig, hogy a switch végén van egy lekezelt default ág is...

 

default: System.out.println("Rossz adatbevitel!"); break;

 

...amely azonban garantáltan soha sem fog lefutni, hiszen az ellenőrzött adatbevitel nem fogja engedni a default ág lefutásához szükséges változótartalmat.