IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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:

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ě");
}

S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat:

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ě");
}

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:

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.");

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:

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.");

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

 

Předchozí článek
Podmínky (větvení) v Javě
Všechny články v sekci
Základní konstrukce jazyka Java
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 7.-8. lekci Javy
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
576 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity