Programovßnφ v jazyce JavaKurz programovßnφ v Jav∞ - 7. dφl |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
┌vodem | Kurz programovßnφ v Jav∞ | Kurz programovßnφ v Jav∞ pro mobilnφ telefony | Soubory ke sta₧enφ | Otßzky a odpov∞di |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
┌vod Vφtejte u 7. pokraΦovßnφ kurzu programovßnφ v Jav∞. V tomto dφle probereme n∞kterΘ p°φkazy. P°φkazy P°φkazy slou₧φ k °φzenφ chodu programu. Mohou se provßd∞t jeden za druh²m, jak jsou napsßny, ale takΘ se mohou n∞kterΘ p°eskoΦit, tomu se °φkß v∞tvenφ programu. Slo₧en² p°φkaz Slo₧en² p°φkaz, nebo takΘ blok, je vφce p°φkaz∙ tvß°φcφch se jako jeden p°φkaz. ZaΦßtek slo₧enΘho p°φkazu tvo°φ levß slo₧enß zßvorka { a konec pravß slo₧enß zßvorka }. Mezi t∞mito dv∞ma zßvorkami je t∞lo bloku. P°φkazy se odd∞lujφ st°ednφkem a pro p°ehlednost je lepÜφ psßt ka₧d² p°φkaz na sv∙j °ßdek. Blok m∙₧e obsahovat vφce p°φkaz∙, jeden p°φkaz, nebo takΘ ₧ßdn² p°φkaz. Bloky lze takΘ do sebe vno°ovat, tzn. ₧e v jednom bloku bude blok dalÜφ. Ve vno°enΘm bloku lze pou₧φvat prom∞nnΘ, kterΘ jsou deklarovßny v obklopujφcφm bloku, ale naopak ne. Pokud tedy deklarujete ve vno°enΘm bloku n∞jakou prom∞nnou, nem∙₧ete ji pou₧φt jinde ne₧ v tom bloku, kde jste ji deklarovali.
V tomto dφle budeme slo₧enΘ p°φkazy Φasto pou₧φvat. Prßzdn² p°φkaz Mo₧nß to znφ podivn∞, ale opravdu se pou₧φvß a docela Φasto. Je to p°φkaz, co ned∞la v∙bec nic. Jeho pou₧φtφ je nutnΘ v p°φpad∞, ₧e je n∞kde po₧adovßn p°φkaz, ale my nechceme nic d∞lat. Prßzdn² p°φkaz lze zapsat bu∩ st°ednφkem ;, nebo slo₧en²mi zßvorkami {}.
Tento p°φklad nenφ nic moc, ale pro demonstraci prßzdnΘho p°φkazu staΦφ (a o to p°eci jde :-)). P°φkaz if Prvnφ p°φkaz umo₧≥ujφcφ v∞tvenφ programu, kter² probereme je p°φkaz if. Pou₧φvß se tam, kde chceme provΘst n∞co jen za urΦitΘ podmφnky. Jeho nejjednoduÜÜφ formu jsme pou₧ili v minulΘm dφle. Jeho dalÜφ mo₧nΘ podoby naleznete v nßsledujφcφch tabulkßch.
V²raz (podmφnka) musφ b²t typu boolean nap°.: 5 > 3. Pokud vyhodnocenφ v²razu vrßtφ true je p°φkaz spln∞n, pokud ale vrßtφ false, p°φkaz se neprovede. U druhΘ mo₧nosti se p°i spln∞nφ v²razu provede cel² slo₧en² p°φkaz, tzn. ₧e se provedou vÜechny p°φkazy ve slo₧en²ch zßvorkßch. N∞kdy je pot°eba provΘst p°φkaz prßv∞ p°i nespln∞nφ podmφnky a na to tu je dalÜφ forma p°φkazu if a to if - else.
P°i spl∞nφ podmφnky je proveden p°φkaz1 a p°i nespln∞nφ p°φkaz2. Druhß mo₧nost ukazuje to samΘ, ale s pou₧itφm slo₧en²ch p°φkaz∙. P°φkazy if - else lze do sebe vno°ovat, ukß₧eme si to na p°φkladu:
Myslφm, ₧e fungovßnφ vno°en²ch podmφnek je z p°φkladu jasnΘ. Kdyby ne, tak to funguje tak, ₧e za else je oΦekßvßn p°φkaz a prßv∞ tam se vlo₧φ dalÜφ p°φkaz if. V tomto p°φpad∞ by se provedl prikaz4. U t°etφ podmφnky je jeÜt∞ vlo₧en jeden p°φkaz if, pro ukßzku vÜech mo₧nostφ. Odsazovßnφ jednotliv²ch p°φkaz∙ a od°ßdkovßnφ nemusφte d∞lat p°esn∞ podle m∞, proto₧e to zßle₧φ na ka₧dΘm jak mu to vyhovuje. Samoz°ejm∞ existujφ urΦitΘ konvence, kterΘ je nutnΘ dodr₧ovat, ale i tak je v nich mnoho mφsta na vlastnφ styl odsazovßnφ a od°ßdkovßnφ. Nap°φklad zßvorky nemusφte pou₧φvat pokud pou₧ijete jen jeden p°φkaz, ale jß je v₧dy pou₧φvßm kv∙li p°ehlednosti, tak₧e zßle₧φ na vßs co si vyberete, jß t°eba preferuji p°ehlednost zdrojovΘho k≤du. P°φkaz switch DalÜφ p°φkaz pro v∞tvenφ programu je switch. ╚esky by se takΘ dal nazvat p°epφnaΦ. Jedna z mo₧n²ch forem je ukßzßna v nßsledujφcφ tabulce.
V²raz m∙₧e b²t pouze typu char, byte, short nebo int. V²sledek v²razu se porovnßvß s konstantami. Pokud se narazφ na odpovφdajφcφ konstantu, provedou se vÜechny v²razy za dvojteΦkou a₧ do konce p°φkazu switch. Toto °eÜenφ nemusφ vyhovovat ka₧dΘmu a tak se pou₧φvß p°φkaz break k p°eskoΦenφ vÜech dalÜφch p°φkaz∙. P°φkaz break je vysv∞tlen dßle, ale my si jeho pou₧φtφ ukß₧eme na p°φkladu. Pokud se odpovφdajφcφ konstanta nenajde, provede se p°φkaz za default:. Default se pou₧φvat nemusφ, ale pak se neprovede ₧ßdn² p°φkaz, pokud se nenajde odpovφdajφcφ konstanta.
Pro jeho ·plnΘ pochopenφ bude nejlepÜφ, kdy₧ si ho ka₧d² po°ßdn∞ prozkouÜφ vÜemi mo₧n²mi zp∙soby. P°φkaz break je zde pou₧it proto, aby se dalÜφ zbylΘ p°φkazy uvedenΘ za break p°eskoΦili. N∞kdy je zase pot°eba aby se p°ovedli vÜechny dalÜφ p°φkazy, tak se break neuvede. Zde mß v²raz hodnotu 35, nalezne se odpovφdajφcφ konstanta a za dvojteΦkou je nalezen p°φkaz: c = 2; a break. Kdyby tam p°φkaz break nebyl provedly by se i p°φkazy c = 3; a c = 10;(Jen tehdy pokud by nebyly pou₧ity p°φkazy break nikde). P°φkaz while P°φkaz while se °adφ to tzv. cykl∙. Cyklus proto, ₧e se jeho t∞lo opakuje tak dlouho, dokud platφ podmφnka (v²raz). V²raz, jako obvykle musφ b²t typu boolean, to znamenß, ₧e v²sledek v²razu musφ b²t true nebo false.
Je dobrΘ ho pou₧φvat v situacφch, kdy je pot°eba opakovat p°φkazy, ale nenφ znßmo kolikrßt, p°ed zaΦßtkem cyklu, nap°φklad naΦφtßnφ dat ze souboru. V∞tÜinou nidky nevφme, kolik dan² soubor bude mφt dat, tak₧e se data naΦφtajφ tak dlouho, dokud n∞jakß jsou. My si po vysv∞tlenφ cyklu do-while ukß₧eme p°φklad pro naΦφtßnφ dat z konzole pomocφ while i do-while. P°φkaz do-while Tento cyklus je podobn² obyΦejnΘmu cyklu while. Nejd°φve provede p°φkaz a pak teprve kontroluje v²raz, kter² kdy₧ mß hodnotu true, znovu provede p°φkaz. Nap°φklad by se dal vyu₧φt pro Φtenφ znak∙ po znaku z konzole, jde to provΘst i pomocφ pou₧itφ obyΦejnΘho cyklu while. Oba p°φklady si ukß₧eme.
Toto jsou zdrojovΘ k≤dy program∙, kterΘ fungujφ ·pln∞ stejn∞, ale jeden pou₧φvß cyklus do-while a druh² while. V∞ci kterΘ dosud nebyly probrßny, budou urΦit∞ probrßny v nßsledujφch dφlech. P°φkaz import se pou₧φvß proto, aby se nemuseli psßt celΘ nßzvy t°φd i balφk∙ ve kter²ch jsou. Balφky jsme jeÜt∞ neprobφrali, tak₧e n∞kdy p°φÜt∞ je urΦit∞ probereme, zatφm to berte tak, ₧e to musφ b²t. Pou₧ili jsme objekt t°φdy StringBuffer, ten takΘ bude vysv∞tlen pozd∞ji. Je to objekt, kter² se pou₧φvß pro °et∞zce, stejn∞ jako String, je to zde pou₧ito kv∙li lepÜφmu v²konu aplikace (i kdy₧ nßm je te∩ jedno jak je aplikace rychlß). T°φda InputStreamReader se pou₧φvß pro Φtenφ znak∙. System.in je statick² objekt, kter² standardn∞ uchovßvß odkaz na vstupnφ konzoli. Metoda read() objektu InputStreamReader naΦφtß jeden znak z konzole. Asi je vßm z toho plno v∞cφ nejasn²ch, ale to nevadφ, proto₧e tohle nebyl p°φklad pro nauΦenφ Φtenφ dat z konzole, ale pro ukß₧ku dvou cykl∙, kterΘ jsme se v tomto dφle nauΦili. P°φkaz for Nejvφce pou₧φvan² cyklus, kter² nesmφ chyb∞t v ₧ßdnΘm jazyku, je cyklus for, kter² ani v Jav∞ nechybφ. Standardn∞ se pou₧φvß, tak, ₧e se deklaruje a inicializuje °φdφcφ prom∞nnß pro tento cyklus. Dßle se uvede podmφnka. A poslednφ v∞cφ je iterace °φdφcφ prom∞nnΘ.
Zajφmavostφ na tomto cyklu je, ₧e vÜechny parametry v zßvorkßch jsou nepovinnΘ. Ukß₧eme vÜechny druhy pou₧φtφ, s parametry i bez v nßsledujφcφm tabulce.
Tyto mo₧nosti tu sice jsou, ale nejlepÜφ (doporuΦovanß) a nejp°ehledn∞jÜφ je mo₧nost prvnφ. P°φkaz break a continue P°φkazy break a continue by zaslou₧ili hlubÜφ v²klad, a tak si je nechßme na p°φÜt∞. Dnes si pouze °ekneme, ₧e p°φkaz break, kter² jsme pou₧φvali v naÜich p°φkladech p°eskoΦφ t∞lo p°φkazu a pokraΦuje za nφm. P°φkaz continue se pou₧φvß v cyklech a p°eskoΦφ zbytek t∞la p°φlazu, ale pokraΦuje dalÜφm cyklem. Podrobn∞, ale a₧ p°φÜt∞. Zßv∞r V dneÜnφm dφle jsme probrali r∙znΘ druhy p°φkaz∙. Slo₧enΘ p°φkazy, neboli bloky, "rozhodovacφ" p°φkazy a cykly. V p°φÜtφm dφle se m∙₧ete t∞Üit na dalÜφ p°φkazy a n∞jak² v∞tÜφ program vyu₧φvajφcφ vÜechny p°φkazy, kterΘ jsme se nauΦili. Nashledanou u dalÜφch dφl∙. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||