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 pomocí
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 | || |
Na české klávesnici píšeme znaky &
a
|
pomocí Pravého Alt a kláves W a
C:
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 (relativně) zjednodušit
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 provést. 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 výstup vypadat 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ěme si, že jsme proměnnou vysledek
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 by
chybu redeklarace proměnné. Důležité je také proměnné
vysledek
přiřadit nějakou výchozí hodnotu, v našem
případě nulu, 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 oněch else
, ale nač se dále
ptát, když již máme výsledek.
Nyní si zkusíme napsat tentýž 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 nás, jestli budeme konstrukci switch
používat.
Obecně se vyplatí jen při větším množství příkazů a vždy lze
nahradit sekvencí if
a else
. Nezapomínejme na
klíčové slovo break
. Konstrukce switch
je v Javě
podporována 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 275x (27.92 kB)
Aplikace je včetně zdrojových kódů v jazyce Java