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