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:
{JAVA_CONSOLE}
if (15 > 5) {
System.out.println("Pravda");
}
System.out.println("Program zde pokračuje dál");
{/JAVA_CONSOLE}
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á:
{JAVA_CONSOLE}
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í");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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í");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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í");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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í");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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);
{/JAVA_CONSOLE}
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
:
{JAVA_CONSOLE}
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);
{/JAVA_CONSOLE}
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