Programovßnφ v jazyce Java

Kurz programovßnφ v Jav∞ - 4. dφl

 ┌vodem  |  Kurz programovßnφ v Jav∞  |  Soubory ke sta₧enφ  |  Otßzky a odpov∞di

 

┌vod

Vφtejte u dalÜφho dφlu o zßkladech programovßnφ v Jav∞. Dnes budeme probφrat operßtory.

Operßtory

Operßtory slou₧φ k r∙zn²m operacφm. UrΦujφ jakΘ operace se provedou s operandy. Kdybychom Üli vφce do hloubky, tak vlastn∞ °φkajφ p°ekladaΦi jakΘ operace chcete s hodnotami provΘst. Existujφ 6 skupin operßtor∙: aritmetickΘ, logickΘ, relaΦnφ, bitovΘ, p°i°azovacφ a ternßrnφ.

AritmetickΘ operßtory

Java definuje 7 aritmetick²ch operßtor∙, jejich seznam najdete v nßsledujφcφ tabulce.

AritmetickΘ operßtory
Operßtor V²znam
+ sΦφtanφ
- odΦφtßnφ
* nßsobenφ
/ d∞lenφ
% zbytek po d∞lenφ
++ zv²Üenφ o jedniΦku
-- snφ₧enφ o jedniΦku

VÜechny lze pou₧φt na ΦφselnΘ datovΘ typy, celoΦφselnΘ i reßlnΘ a znakov² typ char. VÜechny takΘ majφ stejn² v²znam jako v matematice. Operßtor % funguje tak, ₧e 5 % 2 = 1, 5 / 2 = 2 a zbytek je 1, kter² nßm operßtor % vrßtφ. Pokud pou₧ijeme operßtor / na celoΦφselnΘ typy, nem∙₧eme poΦφtat s desetinnou Φßstφ, v²sledek m∙₧e b²t nep°esn², 20 / 6 = 3, ale 20.0 / 6.0 = 3.33.

V²znam operßtoru ++ a -- si vysv∞tlφme na nßsledujφcφch p°φkladech. Operßtor ++ p°iΦte jedniΦku k ΦφselnΘ prom∞nnΘ a operßtor -- odeΦte jedniΦku.

Operßtor ++ a --
int i = 10; // i je 10
i ++; // i je 11
i --; // i je 10

Oba lze zapsat jako prefix (p°ed operand), nebo jako postfix (za operand, stejn∞ jako v p°edchozφ tabulce). Oba zp∙soby jsou vysv∞tleny v nßsledujφcφ tabulce.

Operßtor ++ a --
int i = 10; // i je 10
int t = i ++ // t je 10, ale i 11
int u = ++ t // u je 11 a t takΘ

To znamenß, ₧e prefixov² tvar hodnotu nejd°φve zv∞tÜφ a potom pou₧ije, ale postfixov² p°esn∞ naopak, nejd°φve pou₧ije p∙vodnφ hodnotu a potom zv∞tÜφ. Oba tvary majφ svΘ vyu₧itφ.

LogickΘ operßtory

LogickΘ operßtory se pou₧φvajφ k operacφm s prom∞nn²mi typu boolean. A jejich v²sledkem je takΘ typ boolean.

LogickΘ operßtory
Operßtor V²znam
& AND - logick² souΦin (konjunkce)
&& AND - logick² souΦin se zkrßcen²m vyhodnocovßnφm
| OR - logick² souΦet (disjunkce)
|| OR - logick² souΦet se zkrßcen²m vyhodnocovßnφm
! NOT - negace
^ XOR - nonekvivalence
Operace s logick²mi operßtory
A B A & B A && B A | B A || B ! A A ^ B
false false false false false false true false
false true false false true true true true
true false false false true true false true
true true true true true true false false

Operßroty && a || fungujφ stejn∞ jako & a | s tφm rozdφlem, ₧e p°i logickΘ podmφnkovΘ operaci se druh² operand vyhodnocuje jen tehdy, pokud je pot°eba. Nßzornß ukßzka je v programu na konci tohoto dφlu.

RelaΦnφ operßtory

RelaΦnφ operßtory porovnßvajφ hodnoty a jejich v²sledkem je hodnota typu boolean. Proto se Φasto pou₧φvajφ ve spojenφ s logick²mi operßtory, kterΘ pracujφ s hodotami typu boolean. Operßtory == a != lze pou₧φt na vÜechny typy v Jav∞ vΦetn∞ objektov²ch typ∙, ale ostatnφ jen na typy co majφ vnφt°nφ uspo°ßdßnφ. Tak₧e je m∙₧ete pou₧φt na vÜechny jednoduchΘ ΦφselnΘ typy (vΦetnΘ typu char, co₧ je vlastnΘ normßlnφ celoΦφseln² typ) a i n∞kterΘ objekty, ale nem∙₧ete s nimi porovnßvat typ boolean.

RelaΦnφ operßtory
Opeßtor V²znam
== rovnß se
!= nerovnß se
> v∞tÜφ
>= v∞tÜφ nebo rovno
< menÜφ
<= menÜφ nebo rovno

Ternßrnφ operßtor

Ternßrnφ se jmenuje proto, ₧e pou₧φvß t°i operandy.

Ternßrnφ operßtor
v²raz - podmφnka ? v²raz1 : v²raz2;
P°.: int i = a == 10 ? 5 : 7;

Podmφnka musφ vracet typ boolean a pokud je v²sledek true, tak se provede v²raz1, jinak v²raz2. V naÜem p°φklad∞ pokud by a se rovnalo 10, tak by se i p°i°adila hodnota 5, jinak hodnota 7. Oba v²razy v²raz1 i v²raz2 musejφ b²t stejnΘho typu.

Program vyu₧φvajφcφ operßtory

V tomto programu pou₧ijeme jeden °φdicφ p°φkaz, kter² bude podrobn∞ji rozebrßn v n∞kterΘm z nßsledujφm dφle, abychom mohli demonstrovat vÜechny operßtory. Je to °φdφcφ p°φkaz if a jeho nejjednoduÜÜφ syntaxe je:

╪φdicφ p°φkaz if
if (podmφnka ) p°φkaz ;
P°.: if (a == 5) b = 8; // pokud je a rovno 5, tak b se p°i°adφ hodnota 8
Zdrojov² k≤d programu Operatory.java
		  
public class Operatory {
  public static void main(String[] args) {
  
    int a = 10;
    int b = 15;
    int c;
    boolean bool = true;
  
    c = a * b;
    System.out.println(c);
  
    if (a == b || b == 15)  System.out.println("Prvni podminka splnena");
    if (a != b && b == 15)  System.out.println("Druha podminka splnena");
    if (a >= b)  System.out.println("Treti podminka splnena");
    if (! (a >= b))  System.out.println("Ctvrta podminka splnena");
    if (bool)  System.out.println("Pata podminka splnena");
    if (! bool)  System.out.println("Sesta podminka splnena");
    if (a == b || b == c || a == c || bool)  System.out.println("Sedma podminka splnena");
    if (c < a && (bool = b < a))  System.out.println("Osma podminka splnena");
//    if (c < a & (bool = b < a))  System.out.println("Osma podminka splnena");
    System.out.println(bool);
  
  }
}  
			  
		  

Na prvnφm je deklarace t°φdy s nßzvem Operatory a je definovßna jako public (ve°ejnß). public je specifikßtor p°φstupu a t∞mi se budeme zab²vat pozd∞ji. Proto₧e je to deklarace t°φdy, proto klφΦovΘ slovo class. Za identifikßtorem nßsleduje levß slo₧enß zßvorka, kterou t°φda zaΦφnß a konΦφ pravou slo₧enou zßvorkou. Na druhΘm °ßdku nßsleduje deklarace ve°ejnΘ (public), statickΘ (static - v²znam si vysv∞tlφme pozd∞ji) metody s identifikßtorem main. Mß jen jeden parametr a to pole (pole si takΘ vysv∞tlφme pozd∞ji) objektov²ch datov²ch typ∙ String s identifikßtorem args, tento identifikßtor je jedinou v∞cφ, kterou m∙₧ete na tΘto deklaraci zm∞nit. Kdy₧ spustφme program, zaΦφnß jeho provßd∞nφ prßv∞ v metod∞ main. Za kulat²mi zßvorkami ve kter²ch je deklarovßn parametr nßsleduje, stejn∞ jako u t°φdy levß slo₧enß zßvorka, kterou zaΦφnß t∞lo metody main() a konΦφ pravou slo₧enou zßvorkou. Metody, t°φdy a jejich specifikßtory p°φstupu budeme probφrat pozd∞ji. Na dalÜφch dvou °ßdcφch je deklarace a inicializace prom∞nn²ch a a b. Na ÜestΘm je pouze deklarace prom∞nnΘ c. 7. °ßdek obsahuje deklaraci a inicializaci hodnotou false logickΘho typu boolean. Na 9. °ßdku se prom∞nnΘ c p°i°adφ hodnota souΦinu prom∞nn²ch a a b. Na dalÜφm °ßdku je volßnφ metody println() statickΘho objektu out t°φdy System a jako parametr jφ p°edßvßme prom∞nnou c, kterou metoda vypφÜe do konzole. Nßsledujφcφ °ßdky obsahujφ °φdφcφ p°φkazy if s r∙zn²mi podmφnkami vyu₧φvajφcφ operßtory, kterΘ jsme se dnes nauΦili. M∙₧ete si nejd°φve rozmyslet, kterΘ hodnoty se vypφÜφ a teprve potΘ spustit program. Pokud vßm nenφ n∞co jasnΘ, napiÜte mi vßÜ problΘm a jß se pokusφm pomoci. D∙le₧itΘ takΘ je, abyste r∙znΘ experimentovali, t°eba s tφmto zdrojov²m k≤dem.

Zßv∞r

To je pro dnes vÜe. P°φÜt∞ se m∙₧ete t∞Üit na bitovΘ operßtory, kterΘ se tolik nepou₧φvajφ, ale urΦitΘ operace bez nich nejdou. TakΘ probereme vÜechny operßtory p°i°azenφ, ale minimßln∞ jeden u₧ znßte dob°e a to je operßtor =. ╪ekneme si co jsou to literßly a mo₧nß i n∞co dalÜφho.

Alen Dvo°ßk