IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

7. diel - Podmienky (vetvenie) v Jave

V predchádzajúcom cvičení, Riešené úlohy k 5.-6. lekcii Javy, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

Aby sme si niečo naprogramovali, potrebujeme nejako reagovať na rôzne situácie. Môže to byť napríklad hodnota zadaná používateľom, podľa ktorej budeme chcieť meniť ďalší beh programu. Hovoríme, že sa program vetví a k vetveniu používame podmienky. Tým sa budeme venovať v celom dnešnom Java tutoriále. Vytvoríme program na výpočet odmocniny a vylepšíme našu kalkulačku.

Podmienky - if

Podmienky zapisujeme pomocou kľúčového slova if, za ktorým nasleduje logický výraz. Ak je výraz pravdivý, vykoná sa nasledujúci príkaz. Ak nie, nasledujúci príkaz sa preskočí a pokračuje sa až pod ním. Vyskúšajme si to:

if (15 > 5)
    System.out.println("True");
System.out.println("The program continues here");

Výstup programu:

Konzolová aplikácia
True
The program continues here

Pokiaľ podmienka platí (tu práve áno), vykoná sa príkaz vypisujúci do konzoly text True. V oboch prípadoch program pokračuje ďalej. Súčasťou výrazu samozrejme môže byť aj premenná:

Scanner scanner = new Scanner(System.in, "Windows-1250");
System.out.println("Enter a number");
int number = Integer.parseInt(scanner.nextLine());
if (number > 5)
    System.out.println("The number you entered is greater than 5!");
System.out.println("Thanks for the input!");

Relačné operátory

Ukážme si teraz relačné operátory, ktoré môžeme vo výrazoch používať:

Operátor C-like zápis
Rovnosť ==
Je ostro väčší >
Je ostro menší <
Je väčší alebo rovný >=
Je menší alebo rovný <=
Nerovnosť !=
Všeobecná negácia !

Rovnosť zapisujeme dvoma == preto, aby sa to neplietlo s bežným priradením do premennej, ktoré sa robí len jedným =. Pokiaľ chceme nejaký výraz znegovať, napíšeme ho do zátvorky a pred neho dáme výkričník.

Blok príkazov

Keď budeme chcieť vykonať viac ako len jeden príkaz, musíme príkazy vložiť do bloku zo zložených zátvoriek:

Scanner scanner = new Scanner(System.in, "Windows-1250");
System.out.println("Enter some number and I'll calculate a square root:");
int number = Integer.parseInt(scanner.nextLine());
if (number >= 0) {
    System.out.println("The number you entered is greater than 0, so I can calculate it!");
    double root = Math.sqrt(number);
    System.out.println("The square root of " + number + " is " + root);
}
System.out.println("Thanks for the input");

Po spustení programu a zadaní hodnôt bude vyzerať výstup takto:

Konzolová aplikácia
Enter some number and I'll calculate a square root:
144
The number you entered is greater than 0, so I can calculate it!
The square root of 144 is 12.0
Thanks for the input

Nezabudnite si naimportovať java.util.Scanner, aby program poznal triedu Scanner.

Často môžete vidieť použitie bloku aj v prípade, že je pod podmienkou len jeden príkaz, väčšinou je to totiž prehľadnejšie.

Program načíta od užívateľa číslo a pokiaľ je väčšie ako 0, vypočíta z neho druhú odmocninu. Okrem iného sme použili triedu Math, ktorá na sebe obsahuje množstvo užitočných matematických metód, niekedy si ju bližšie predstavíme. Metóda sqrt() vracia hodnotu ako double.

Vetva else

Bolo by pekné, keby nám program vynadal v prípade, že zadáme záporné číslo. S doterajšími znalosťami by sme napísali niečo ako:

Scanner scanner = new Scanner(System.in, "Windows-1250");
System.out.println("Enter some number and I'll calculate a square root:");
int number = Integer.parseInt(scanner.nextLine());
if (number >= 0) {
    System.out.println("The number you entered is greater than 0, so I can calculate it!");
    double root = Math.sqrt(number);
    System.out.println("The square root of " + number + " is " + root);
}
if (number < 0) {
    System.out.println("I can't calculate the square root of a negative number!");
}
System.out.println("Thanks for the input!");

Kód však môžeme výrazne zjednodušiť pomocou kľúčového slova else, ktoré vykoná nasledujúci príkaz alebo blok príkazov v prípade, že sa podmienka nevykoná:

Scanner scanner = new Scanner(System.in, "Windows-1250");
System.out.println("Enter a number and I'll get its square root:");
int number = Integer.parseInt(scanner.nextLine());
if (number >= 0) {
    System.out.println("The number you entered is greater than 0, so I can calculate it!");
    double root = Math.sqrt(number);
    System.out.println("The square root of " + number + " is " + root);
}
else {
    System.out.println("I can't calculate the square root of a negative number!");
}
System.out.println("Thanks for the input!");

Kód je oveľa prehľadnejší a nemusíme vymýšľať opačnú podmienku, čo by v prípade zloženej podmienky mohlo byť niekedy veľmi obtiažne. V prípade viacerých príkazov by bol za else opäť blok { }.

Kľúčové slovo else sa tiež využíva v prípade, keď potrebujeme v príkaze manipulovať s premennou z podmienky a nemôžeme sa na ňu tým pádom potom pýtať znova. Program si sám pamätá, že sa podmienka nesplnila, a prejde do sekcie else. Ukážme si to na príklade.

Prehodenie hodnôt premennej

Majme premennú number, kde bude hodnota 0 alebo 1 a od nás sa bude chcieť, aby sme hodnotu prehodili (ak tam je 0, dáme tam 1, ak 1, dáme tam 0). Naivne by sme mohli kód napísať takto:

int number = 0; // the variable is initialized with a value of 0

if (number == 0) { // if the value is 0, we change its value to 1
    number = 1;
}
if (number == 1) { // if the value is 1, we change its value to 0
    number = 0;
}

System.out.println(number);

Nefunguje to, však? Poďme si prejsť, čo bude program robiť. Na začiatku máme v number nulu, prvá podmienka sa určite splní a dosadí do number jednotku. Ale razom sa tak splní aj tá druhá. Čo s tým? Keď podmienky otočíme, budeme mať ten istý problém s jednotkou. Ako z toho von? Áno, použijeme else:

int number = 0; // the variable is initialized with a value of 0

if (number == 0) { // if the value is 0, we change its value to 1
    number = 1;
}
else { // if the value is 1, we change its value to 0
    number = 0;
}

System.out.println(number);

Program máte samozrejme opäť v prílohe, skúšajte si vytvárať nejaké podobné, znalosti už k tomu máte :-)

V budúcej lekcii, Podmienky (vetvenie) druhýkrát: Konštrukcia switch v Jave , sa naučíme skladať podmienky pomocou logických operátorov. Ďalej sa pozrieme na využitie konštrukcie switch.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 2x (13.26 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Riešené úlohy k 5.-6. lekcii Javy
Všetky články v sekcii
Základné konštrukcie jazyka Java
Preskočiť článok
(neodporúčame)
Podmienky (vetvenie) druhýkrát: Konštrukcia switch v Jave
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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 sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity