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:
{JAVA_CONSOLE}
if (15 > 5)
System.out.println("True");
System.out.println("The program continues here");
{/JAVA_CONSOLE}
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á:
{JAVA_CONSOLE}
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!");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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!");
{/JAVA_CONSOLE}
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á:
{JAVA_CONSOLE}
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!");
{/JAVA_CONSOLE}
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:
{JAVA_CONSOLE}
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);
{/JAVA_CONSOLE}
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
:
{JAVA_CONSOLE}
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);
{/JAVA_CONSOLE}
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é 22x (2.31 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java