Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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 7 - Podmínky (větvení) v Javě

V předešlém cvičení, Řešené úlohy k 5.-6. lekci Javy, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Abychom si něco naprogramovali, potřebujeme nějak reagovat na různé situace. Může to být například hodnota zadaná uživatelem, podle které budeme chtít měnit další běh programu. Říkáme, že se program větví a k větvení používáme podmínky, těm se budeme věnovat celý dnešní Java tutoriál. Vytvoříme program na výpočet odmocniny a vylepšíme naši kalkulačku.

Podmínky - if

Podmínky zapisujeme pomocí klíčového slova if, za kterým následuje logický výraz. Pokud je výraz pravdivý, provede se následující příkaz. Pokud ne, následující příkaz se přeskočí a pokračuje se až pod ním. Příkazy píšeme vždy do složených závorek. Vyzkoušejme si to:

if (15 > 5) {
    System.out.println("Pravda");
}
System.out.println("Program zde pokračuje dál");

Výstup programu:

Konzolová aplikace
Pravda
Program zde pokračuje dál

Pokud podmínka platí (což zde ano), provede se příkaz vypisující do konzole text Pravda. V obou případech program pokračuje dál. Součástí výrazu samozřejmě může být i proměnná:

Scanner scanner = new Scanner(System.in);
System.out.println("Zadej nějaké číslo");
int cislo = Integer.parseInt(scanner.nextLine());
if (cislo > 5) {
    System.out.println("Zadal jsi číslo větší než 5!");
}
System.out.println("Děkuji za zadání");

Relační operátory

Ukažme si nyní relační operátory, které můžeme ve výrazech používat:

Operátor C-like zápis
Rovnost ==
Je ostře větší >
Je ostře menší <
Je větší nebo rovno >=
Je menší nebo rovno <=
Nerovnost !=
Obecná negace !

Rovnost zapisujeme dvěma == proto, aby se to nepletlo s běžným přiřazením do proměnné, které se dělá jen jedním =. Pokud chceme nějaký výraz znegovat, napíšeme ho do závorky a před něj vykřičník.

Blok příkazů

Když budeme chtít vykonat více než jen jeden příkaz, musíme příkazy vložit do bloku ze složených závorek:

Scanner scanner = new Scanner(System.in);
System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int zaklad = Integer.parseInt(scanner.nextLine());
if (zaklad >= 0) {
    System.out.println("Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!");
    double odmocnina = Math.sqrt(zaklad);
    System.out.println("Odmocnina z čísla " + zaklad + " je " + odmocnina);
}
System.out.println("Děkuji za zadání");

Po spuštění programu a zadání hodnot bude vypadat výstup takto:

Konzolová aplikace
Zadej nějaké číslo, ze kterého spočítám odmocninu:
144
Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!
Odmocnina z čísla 144 je 12.0
Děkuji za zadání

Nezapomeňte si naimportovat java.util.Scanner, aby program znal třídu Scanner.

Často můžete vidět použití bloku i v případě, že je pod podmínkou jen jeden příkaz, mnohdy je to totiž přehlednější.

Program načte od uživatele číslo a pokud je větší než 0, vypočítá z něj druhou odmocninu. Mimo jiné jsme použili třídu Math, která na sobě obsahuje řadu užitečných matematických metod, někdy si ji blíže představíme. Metoda sqrt() vrací hodnotu jako double.

Větev else

Bylo by hezké, kdyby nám program vyhuboval v případě, že zadáme záporné číslo. S dosavadními znalostmi bychom napsali něco jako:

Scanner scanner = new Scanner(System.in);
System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int zaklad = Integer.parseInt(scanner.nextLine());
if (zaklad >= 0) {
    System.out.println("Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!");
    double odmocnina = Math.sqrt(zaklad);
    System.out.println("Odmocnina z čísla " + zaklad + " je " + odmocnina);
}
if (zaklad < 0) {
    System.out.println("Odmocnina ze záporného čísla neexistuje v oboru reálných čísel!");
}
System.out.println("Děkuji za zadání");

Kód však můžeme výrazně zjednodušit pomocí klíčového slova else, které vykoná následující příkaz nebo blok příkazů v případě, že se podmínka neprovede:

Scanner scanner = new Scanner(System.in);
System.out.println("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int zaklad = Integer.parseInt(scanner.nextLine());
if (zaklad >= 0) {
    System.out.println("Zadal jsi číslo větší nebo rovno 0, to znamená, že ho mohu odmocnit!");
    double odmocnina = Math.sqrt(zaklad);
    System.out.println("Odmocnina z čísla " + zaklad + " je " + odmocnina);
}
else {
    System.out.println("Odmocnina ze záporného čísla neexistuje v oboru reálných čísel!");
}
System.out.println("Děkuji za zadání");

Kód je mnohem přehlednější a nemusíme vymýšlet opačnou podmínku, což by v případě složené podmínky mohlo být někdy i velmi obtížné. V případě více příkazů by byl za else opět blok { }.

Klíčové slovo else se také využívá v případě, kdy potřebujeme v příkazu manipulovat s proměnnou z podmínky a nemůžeme se na ni tedy ptát potom znovu. Program si sám pamatuje, že se podmínka nesplnila a přejde do sekce else. Ukažme si to na příkladu.

Prohození hodnot proměnné

Mějme proměnnou cislo, kde bude hodnota 0 nebo 1 a po nás se bude chtít, abychom hodnotu prohodili (pokud tam je 0, dáme tam 1, pokud 1, dáme tam 0). Naivně bychom mohli kód napsat takto:

int cislo = 0; // do proměnné si přiřadíme na začátku 0

if (cislo == 0) { // pokud je cislo 0, dáme do něj jedničku
    cislo = 1;
}
if (cislo == 1) { // pokud je cislo 1, dáme do něj nulu
    cislo = 0;
}

System.out.println(cislo);

Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku máme v cislo nulu, první podmínka se jistě splní a dosadí do cislo jedničku. No ale rázem se splní i ta druhá. Co s tím? Když podmínky otočíme, budeme mít ten samý problém s jedničkou. Jak z toho ven? Ano, použijeme else:

int cislo = 0; // do proměnné si přiřadíme na začátku 0

if (cislo == 0) { // pokud je cislo 0, dáme do něj jedničku
    cislo = 1;
}
else { // pokud je cislo 1, dáme do něj nulu
    cislo = 0;
}

System.out.println(cislo);

Program máte samozřejmě opět v příloze, zkoušejte si vytvářet nějaké podobné, znalosti již k tomu máte :)

V příští lekci, Podmínky (větvení) podruhé: Konstrukce switch v Javě, se naučíme skládat podmínky pomocí logických operátorů. Dále se podíváme na využití konstrukce switch.


 

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 1217x (33.11 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Řešené úlohy k 5.-6. lekci Javy
Všechny články v sekci
Základní konstrukce jazyka Java
Přeskočit článek
(nedoporučujeme)
Podmínky (větvení) podruhé: Konstrukce switch v Javě
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
811 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