NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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:

Operátory and a or - Základní konstrukce jazyka Java

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 (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:

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

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 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

 

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í:
812 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