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:
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):
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.