<< Premenné | Obsah | Podmienkový príkaz a logické výrazy >>
Do premenných nemusíme ukladať iba konkrétne hodnoty. Oveľa častejšie do premenných ukladáme hodnoty iných premenných a ešte častejšie výsledky nejakých výpočtov. Podobne, keď voláme metódy, ako parameter môžeme uviesť nielen konkrétnu hodnotu, názov premennej, ale aj jednoduchý výpočet hodnoty.
Najjednoduchšie numerické výpočty sa zapisujú pomocou aritmetických výrazov.
S počítaním aritmetických výrazov sa stretávame už od základnej školy. Takže iba stručné zhrnutie. Aritmetické výrazy sa vyhodnocujú podľa priority operátorov. Najvyššiu prioritu majú výrazy v zátvorkách, potom násobenia a delenia a nakoniec sčítania a odčítania. V prípade, ak je za sebou viac operátorov s rovnakou prioritou, vyhodnocujú sa z ľava do prava.
Spravme si príklad, na ktorom je vidieť použitie.
Posledný výraz sa vyhodnocuje v nasledujúcom poradí:
c
+ b
/ (2 + a
) * 5
Takže nakoniec máme vypočítanú hodnotu výrazu 7.0, ktorá sa uloží do premennej a
, čím sa nenávratne prepíše pôvodná hodnota 6.0 uložená v premennej a
doteraz.
Z predchádzajúceho príkladu môžeme vidieť, že vždy sa najskôr vyhodnotí pravá strana priradenia a až po jej vyhodnotení sa ukladá výsledok do premennej na napísanej ľavo od = (rovná sa).
Čo sa týka výrazov z matematického hľadiska, zrejme ste nenašli žiadne prekvapenia a všetko fungovalo podľa predstáv.
V prípade práce s celými číslami si už treba dať väčší pozor. Príkazy sčítania, odčítania a násobenia fungujú rovnako ako pri reálnych číslach.
Pri delení dvoch celých čísiel v bežnej matematike sa často stane, že výsledok už nie je celým číslom, napríklad ak delíme 3 a 2. V Jave je výsledok delenia dvoch celých čísiel VŽDY celé číslo! Operácia sa volá celočíselné delenie. S týmto delením ste sa určite stretli na základnej škole, keď ste sa učili deliť bez použitia kalkulačky.
Príklady celočíselného delenia:
5 / 2 je 2 zvyšok 1 16 / 4 je 4 zvyšok 0 -52 / 7 je -7 zvyšok 3
Napíšme si program, ktorý nám tieto výpočty overí. Pribudne nám nový operátor %, ktorého aplikáciou získame zvyšok po delení. Tento zvyšok je tiež vždy celé číslo.
Ako bude fungovať náš program s premennými a
, b
, c
po zmene typov premenných?
Posledný výraz sa vyhodnocuje v nasledujúcom poradí:
c
+ b
/ (2 + a
) * 5
Čo sa stane, ak začneme miešať celé a reálne čísla? V nasledujúcej tabuľke si namiesto znaku $ dosaďte ľubovoľný operátor +, -, * alebo /:
typy hodnôt vo výraze | typ hodnoty výsledku |
int $ int | int |
int $ double | double |
double $ int | double |
double $ double | double |
Z tejto tabuľky vyplýva, že stačí aby aspoň jedna hodnota lebo premenná bola typu double
a výsledok výrazu je typu double
. Ukážme si to na príkladoch:
Z predchádzajúcom príklade môžeme vidieť, že aj konkrétne hodnoty (nazývané tiež literály) majú svoj typ. Konkrétne číselné hodnoty nazývame numerické literály. Platí pravidlo, že ak numerický literál neobsahuje desatinnú čiarku (či presnejšie bodku), potom ide o celočíselnú hodnotu (podľa rozsahu, zvyčajne int
). Naopak ak numerický literál obsahuje desatinnú čiarku, typ tejto hodnoty je double
. Na to je dôležité myslieť najmä pri delení. Spomínate si na problém s nakreslením n
-cípej hviezdy, kde n
bolo 100? Problém bol spôsobený tým, že uhol natočenia sme vypočítali ako 360/n
. Teraz už vieme, že numerický literál je typu int
(neobsahuje desatinnú bodku) a premenná (resp. parameter) n
je tiež typu int
. Keďže oba operandy sú celočíselné, znamená to, že operácia /
bude operáciou celočíselného delenia. Ak teda n
bolo 100, tak 360/100
nebude 3.6
ale 3
. My však chceme realizovať reálne delenie. Na to musí byť jeden z operandov reálne číslo. Výpočet uhla preto zapíšeme výrazom 360.0/n
, ktorý nám zabezpečí aplikovanie neceločíselného delenia.
Na záver tejto podkapitoly si ešte ukážeme, ako sa vyhnúť celočíselnému deleniu aj napriek tomu, že oba operátory sú celé čísla. Musíme urobiť takzvané pretypovanie, teda násilnú konverziu jedného z celočíselných operátorov operátorov na reálne číslo. Spravíme to tak, že pred niektorý z operátorov napíšeme (double)
.
Keďže programátori sú leniví, snažia sa niektoré príkazy skracovať, aby nemuseli veľa písať. Ide o príkazy, v ktorých sa na pravej strane priradenia použije stará hodnota premennej v nejakom jednoduchom aritmetickom výraze a výsledok sa zapíše opäť do tej istej premennej. Nasledujúca tabuľka vám ukáže prehľad takýchto skratiek - funguje pre celé aj reálne čísla s výnimkou operátora %, ktorý funguje iba pre celé čísla:
normálny zápis |
skrátený zápis |
a = a + b; | a+=b; |
a = a - 10; | a-=10; |
a = a * 5; | a*=5; |
a = a / 7; | a/=7; |
a = a % 3; | a%=3; |
a = a + 1; | a++; |
a = a - 1; | a--; |
<< Premenné | Obsah | Podmienkový príkaz a logické výrazy >>