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 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 mohli něco naprogramovat, 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. Tomu se říká, že se program větví. K větvení používáme podmínky, kterým se budeme věnovat celý dnešní Java tutoriál. Vytvoříme si 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, program následující příkaz přeskočí a pokračuje 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ž v našem případě 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 nespletla 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 výstup vypadat 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ůžeme 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, které si blíže představíme později v kurzu. Metoda sqrt() vrací hodnotu jako double.

Větev else

Bylo by dobré, 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 za else následoval 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 proměnnou tedy ptát 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, která bude mít hodnotu 0 nebo 1. Po nás se bude chtít, abychom hodnotu prohodili (bude-li hodnota 0, dosadíme místo ní 1, bude-li 1, dosadíme 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);

Kód nefunguje, že? Pojďme si projít, 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 druhá podmínka. Co s tím? Když podmínky otočíme, budeme mít tentýž 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 1282x (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í:
1013 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