Lekce 8 - Podmínky (větvení) podruhé: Konstrukce switch v Javě
V minulé lekci, Podmínky (větvení) v Javě, jsme si vysvětlili podmínky.
V dnešním Java tutoriálu se naučíme skládat podmínky za pomoci
logických operátorů. Následně se podíváme na konstrukci
switch
a vytvoříme jednoduchou kalkulačku.
Skládání podmínek
Podmínky je možné skládat, a to pomocí dvou základních logických operátorů:
Operátor | C-like Zápis |
---|---|
A zároveň | && |
Nebo | || |
Uveďme si jednoduchý příklad:
{JAVA_CONSOLE}
Scanner scanner = new Scanner(System.in);
System.out.println("Zadejte číslo v rozmezí 10-20:");
int cislo = Integer.parseInt(scanner.nextLine());
if ((cislo >= 10) && (cislo <= 20)) {
System.out.println("Zadal jsi správně");
} else {
System.out.println("Zadal jsi špatně");
}
{/JAVA_CONSOLE}
S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat:
{JAVA_CONSOLE}
Scanner scanner = new Scanner(System.in);
System.out.println("Zadejte číslo v rozmezí 10-20 nebo 30-40:");
int cislo = Integer.parseInt(scanner.nextLine());
if (((cislo >= 10) && (cislo <= 20)) || ((cislo >= 30) && (cislo <= 40))) {
System.out.println("Zadal jsi správně");
} else {
System.out.println("Zadal jsi špatně");
}
{/JAVA_CONSOLE}
Switch
Konstrukce switch
je převzatá z jazyka C
(jako většina gramatiky Javy). Umožňuje nám zjednodušit (relativně)
zápis více podmínek pod sebou. Vzpomeňme si na naši kalkulačku v prvních
lekcích, která načetla 2 čísla a vypočítala všechny 4 operace. Nyní si
ale budeme chtít zvolit, kterou operaci chceme. Bez konstrukce
switch
bychom napsali kód podobný tomuto:
{JAVA_CONSOLE}
Scanner scanner = new Scanner(System.in);
System.out.println("Vítejte v kalkulačce");
System.out.println("Zadejte první číslo:");
double a = Double.parseDouble(scanner.nextLine());
System.out.println("Zadejte druhé číslo:");
double b = Double.parseDouble(scanner.nextLine());
System.out.println("Zvolte si operaci:");
System.out.println("1 - sčítání");
System.out.println("2 - odčítání");
System.out.println("3 - násobení");
System.out.println("4 - dělení");
int volba = Integer.parseInt(scanner.nextLine());
double vysledek = 0;
if (volba == 1) {
vysledek = a + b;
} else if (volba == 2) {
vysledek = a - b;
} else if (volba == 3) {
vysledek = a * b;
} else if (volba == 4) {
vysledek = a / b;
}
if ((volba > 0) && (volba < 5)) {
System.out.println("Výsledek: " + vysledek);
} else {
System.out.println("Neplatná volba");
}
System.out.println();
System.out.println("Děkuji za použití kalkulačky.");
{/JAVA_CONSOLE}
Po spuštění kalkulačky a zadání hodnot bude vypadat výstup takto:
Konzolová aplikace
Vítejte v kalkulačce
Zadejte první číslo:
3.14
Zadejte druhé číslo:
2.72
Zvolte si operaci:
1 - sčítání
2 - odčítání
3 - násobení
4 - dělení
2
Výsledek: 0.42
Děkuji za použití kalkulačky.
Všimněte si, že jsme proměnnou výsledek deklarovali na začátku, jen tak do ni můžeme potom přiřazovat. Kdybychom ji deklarovali u každého přiřazení, Java by kód nezkompilovala a vyhodila chybu redeklarace proměnné. Důležité je také přiřadit výsledku nějakou výchozí hodnotu, zde nula, jinak by nám Java vyhubovala, že se snažíme vypsat proměnnou, která nebyla jednoznačně inicializována. Proměnná může být deklarována (založena v paměti) vždy jen jednou.
Další vychytávka je kontrola správnosti volby. Program by v tomto
případě fungoval stejně i bez těch else
, ale nač se dále
ptát, když již máme výsledek.
Nyní si zkusíme napsat ten samý kód pomocí konstrukce
switch
:
{JAVA_CONSOLE}
Scanner scanner = new Scanner(System.in);
System.out.println("Vítejte v kalkulačce");
System.out.println("Zadejte první číslo:");
double a = Double.parseDouble(scanner.nextLine());
System.out.println("Zadejte druhé číslo:");
double b = Double.parseDouble(scanner.nextLine());
System.out.println("Zvolte si operaci:");
System.out.println("1 - sčítání");
System.out.println("2 - odčítání");
System.out.println("3 - násobení");
System.out.println("4 - dělení");
int volba = Integer.parseInt(scanner.nextLine());
double vysledek = 0;
switch (volba) {
case 1:
vysledek = a + b;
break;
case 2:
vysledek = a - b;
break;
case 3:
vysledek = a * b;
break;
case 4:
vysledek = a / b;
break;
}
if ((volba > 0) && (volba < 5)) {
System.out.println("Výsledek: " + vysledek);
} else {
System.out.println("Neplatná volba");
}
System.out.println();
System.out.println("Děkuji za použití kalkulačky.");
{/JAVA_CONSOLE}
Vidíme, že kód je trochu přehlednější. Pokud bychom
potřebovali v nějaké větvi switch
spustit více příkazů,
překvapivě je nebudeme psát do bloku, ale rovnou pod sebe. Blok
{}
nám zde nahrazuje příkaz break
, který způsobí
vyskočení z celé konstrukce switch
. Konstrukce
switch
může místo možnosti case x:
obsahovat
ještě možnost default:
, která se vykoná v případě, že
nebude platit žádný case
.
Je jen na vás, jestli budete konstrukci switch
používat,
obecně se vyplatí jen při větším množství příkazů a vždy jde
nahradit sekvencí if
a else
. Nezapomínejte na
klíčové slovo break
. Konstrukce switch
je v Javě
podporován i pro hodnoty proměnné String
, a to od Javy 7.
V následujícím cvičení, Řešené úlohy k 7.-8. lekci Javy, si procvičíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 197x (27.92 kB)
Aplikace je včetně zdrojových kódů v jazyce Java