Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Java
Operace s datovými typy
java
12. srpna 2002, 00.00 | Dnes se podíváme na dokončení datových typů, přesněji řečeno to budou operace s datovými typy a jednotlivé operátory.
Již zde bylo zmíněno či na příkladech ukázáno, že deklarace se provádí způsobem:
|
Před typem pak v obou případech mohou být uvedeny klíčová slova public, private, static aj., které nás zatím nezajímají. Protože se vesměs zabývají rozsahem platnosti proměnné.
Je nutno si uvědomit, že deklarací bez přiřazení hodnoty sice vytvoříte danou proměnou daného typu, ale není do ní předána žádná hodnota, tudíž začnete-li se na ní odkazovat, dříve než jí přiřadíte hodnotu, program pravděpodobně vygeneruje chybu.
Základní matematické operaciStandardní Java používá 5 základních operací: sčítání, odečítání, násobení, dělení, a zbytek po dělení. S nimi lze provádět absolutně všechny potřebné výpočty. Případně lze doprogramovat další vámi požadované funkce. Java jich však již má řadu napsaných v třídě Math.
Operace |
Popis |
Příklad |
– | sčítání | 1 + 7 |
+ | odčítání | 3 – 5 |
* | násobení | 2 * 3 |
/ | dělení | 7. / 2.3 |
% | zbytek po dělení | 9.1 % 1.21 |
Většina těchto operací proběhne, tak jak předpokládáte. Jediným zádrhelem zřejmě bude dělení. Musíte si uvědomit, kterými datovými typy dělíte! Protože operace vám bude vracet celočíselný výsledek při dělení dvou intů a reálný v případě dělení floatů resp. double. Tudíž stejná operace, ale s jinými typy vrací různé výsledky viz. příklad.
|
Přetečení
Nezapomínejte si zvolit pro vaše proměnné nejvíce vyhovující typ. U celočíselných se vám bude ztrácet desetinná část. Taktéž vám nemusí pro velmi přesné výpočty postačovat float, který má jen řádově poloviční přesnost oproti double. Tato nepřesnost se projeví již v tak jednoduchém případě jako je tento: 1. / 3. * 3. nebude opět 3, ale pouze něco jí velice blízkého.
To ovšem není to k čemu jsem se chtěl dostat, jestliže si zvolíte nevhodný typ, může se vám stát, že se nevejdete do jeho intervalu a proměnná tzv. přeteče. To má za následek, že se dostanete na druhou stranu intervalu daného čísla např. k byte o hodnotě 126 přičtete 12 a nyní bude mít hodnotu –118!
|
Zmíněný příklad je typická začátečnická chyba, která se často velice špatně dohledává.
Poznámka autora: řešení přetečení nespočívá v deklaraci největšího možného typu. To má totiž jeden neblahý následek: s většími typy se program stává stále pomalejší.
Za běhu programu je samozřejmě možné se obrátit na daný datový typ a zeptat se ho na jeho minimální resp. maximální hodnotu. Umožňují to konstanty v daných třídách oněch typů.
|
Další operátory
Vzhledem k tomu, že při psaní kódu potřebujete provádět operace s proměnou a výsledek má být opět hodnotou dané proměnné. Definuje Java stejně jako C, narozdíl od Pascalu, další operátory, které nám ušetří pár slov při psaní.
Operátor |
Příklad |
Význam |
= | x = x + y | přiřazení hodnoty |
+= | x += y | součet x = x + y |
-= | x -= y | rozdíl x = x - y |
*= | x *= y | násobení x = x * y |
/= | x /= y | podíl x = x / y |
%= | x %= y | zbytek po celočíselném dělení x = x % y |
&= | x &= y | AND x = x & y |
|= | x |= y | OR x = x | y |
^= | x ^= y | XOR x = x ^ y |
<<= | x <<= y | posun doleva x = x << y |
>>= | x >>= y | posun doprava x = x >> y |
>>>= | x >>>= y | posun doprava + zaplnění nulami x = x >>> y |
Z tabulky je názorně vidět, že místo toho abych napsal x = x + y mohu napsat jen x += y a to se stejným významem.
Přírůstkové a úbytkové operátoryVzhledem k tomu, že se často u celočíselných typů objevuje zvýšení či snížení proměnné o jedničku, byly vytvořeny další čtyři operátory pro zjednodušení zápisu.
Tři možné zápisy jednoho a toho samého:
|
Jsou to operátory ++ resp. následované resp. předcházené identifikátorem proměnné. Jejich význam je dostatečné znám, proto to vezmu jen v rychlosti.
Je-li operátor za identifikátorem, i++, pak nejdříve vrátí hodnotu i a následně zvětší i o jedničku.
Je-li operátor před identifikátorem, ++i, pak se nejdříve zvýší i o jedničku a následně vrátí jeho hodnotu.
|
Priorita by měla být stejná a to ve všech případech jako v normálním počítání, takže násobení má přednost před sčítáním apod. Nejjednodušší pravidlo zní: nevíte-li závorkujte!
PřetypováníOpět po velmi dlouhé jízdě objížďkou se dostáváme k velmi důležité části programování a to přetypování proměnných.
Casting neboli česky přetypování je konverze jednoho datového typu na druhý např. z int na double. První možností přetypování je konverze z typu nižšího na vyšší např. byte na int. Takovéto konverze Java za vás provádí automaticky. Není nutno je nějak ošetřovat.
|
Upozornění: nezapomínejte myslet! Při dělení dvou celočíselných typů Java nemůže tušit, že chcete vrátit reálné číslo, musíte jí to naznačit přetypováním čísla na reálné.
Druhou variantou přetypování je konverze z vyššího typu na nižší. Zde je vždy nutné napsat přetypování. to má pro Java význam, že jste si vědomi toho, že při této konverzi může být ztraceno přesnost či rozsah čísla.
Obecný vzorec přetypování vypadá:
|
Hodnotou nemusí být jen číslo, ale také jakýkoliv identifikátor proměnné.
|
Obsah seriálu (více o seriálu):
- Posezení u šálku kávy
- Komentáře
- Datové typy v Javě
- Operace s datovými typy
- Platnost proměnné
- Podmínky
- Cykly
- Break a continue
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007