Programovßnφ v jazyce JavaKurz programovßnφ v Jav∞ - 9. 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 dneÜnφm devßtΘm dφle kurzu se budeme zab²vat poli. Pole Pole je skupina prom∞nn²ch stejnΘho datovΘho typu, na kterΘ se lze odkazovat jednφm jmΘnem. JednotlivΘ prom∞nnΘ v poli majφ svoje Φφslo, tzv. index, pomocφ kterΘho lze p°esn∞ urΦit se kterou prom∞nnou v poli chceme pracovat. Existujφ pole jednorozm∞rnß, ale i vφce rozm∞rnß, ukß₧eme si p°φklady obou typ∙. Mo₧nß nejsou v²hody pole zatφm z°ejmΘ, ale nap°φklad uklßdat n∞jak² graf nebo tabulku do jednotliv²ch prom∞nn²ch, kterΘ byste nejd°φve museli deklarovat, potom inicializovat, by vßs moc nebavilo. Na takovΘ p°φpady je pole ideßlnφ kandidßt. P°edstavte si, ₧e pot°ebujete vypoΦφtat vaÜi hrubou mzdu, ale na to je pot°eba v∞d∞t kolik hodin mßte odpracovßno (je to sice trochu zjednoduÜenΘ, ale budeme poΦφtat s tφm, ₧e vÜechny hodiny budou honorovßny stejn∞), prßv∞ odpracovanΘ hodiny za den by se daly zapisovat do jednotliv²ch prvk∙ pole. Nejd°φve deklarujeme pole a vytvo°φme v n∞m 31 prvk∙ typu byte, pro ka₧d² den jeden. Potom ho musφme jeÜt∞ naplnit hodnotami. U₧ te∩ je pole v²hodn∞jÜφ, ne₧ deklarovßnφ 31 prom∞nn²ch, pro kterΘ byste navφc museli vym²Ület nßzvy. Ale hlavnφ v²hody pole teprve p°ijdou. Nap°φklad te∩ m∙₧ete v jednom cyklu vypoΦφtat souΦet hodin vÜech dn∙ nebo souΦet hodin jednotliv²ch t²dn∙, zkrßtka pokud pracujete s vφce prom∞nn²mi stejnΘho typu v₧dy pou₧ijte pole. JeÜt∞ malß poznßmka, zkuste si p°edstavit sΦφtßnφ hodin, kdybyste nepou₧ili pole, t°eba scφtßnφ jen lich²ch dn∙, nebo ka₧dΘho pßtΘho dne, to by byla hr∙za a s polem to vy°eÜφte o dost jednoduÜeji. Jak se ale pole deklaruje? To vßm ukß₧e nßsledujφcφ p°φklad.
JeÜt∞ jsme si nepovφdali o objektech, ale s poli se pracuje podobn∞ jako s objekty. U objekt∙ se nejd°φve vytvo°φ odkaz, kter² mß specifikovan² datov² typ i nßzev a ten odkazuje na n∞jak² objekt, kter² m∙₧eme p°i°adit pozd∞ji. Na p°edchozφm p°φkladu na prvnφm °ßdku deklarujeme prom∞nnou typu pole, kterß bude obsahovat prom∞nnΘ typu byte a nßzev jsme zvolili dny, v podstat∞ je to jen odkaz na objekt. HranatΘ zßvorky urΦujφ, ₧e se deklaruje pole a ne prom∞nnß jednoduchΘho datovΘho typu, jeden pßr zßvorek znaΦφ ₧e jde o pole jednorozm∞rnΘ. Na dalÜφm °ßdku probφhß vytvo°enφ pole, co₧ je vlastn∞ p°i°azenφ objektu odkazu, kter² byl vytvo°en na prvnφm °ßdku. V tomto p°φklad∞ je vytvß°eno pole o velikosti 31 prvk∙. Prvnφ prvek bude mφt index 0, pozor na to, proto₧e poslednφ prvek mß index 30. Pole o n prvcφch bude mφt poslednφ prvek s indexem n - 1. Pole je sice vytvo°eno, ale neobsahaju ₧ßdnΘ prvky (pokud je pole celoΦφselnΘho typu, m∞ly by vÜechny prvky mφt hodnotu 0). Inicializovat ho lze p°φmo p°i vytvß°enφ, nebo dodateΦnΘ, t°eba pomocφ cyklu. Pole m∙₧e b²t jakΘholiv typu, jak jednoduchΘcho, tak objektovΘho. Te∩ u₧ p°ibli₧n∞ vφte, jak vytvo°it jednorozm∞rnΘ pole, tak p°ejdeme k n∞jakΘmu celΘmu p°φkladu, na kterΘm si ukß₧eme v∞ci, kterΘ lze s polem provßd∞t.
Poznßmka na zaΦßtek, vÜimn∞te si jak² argument oΦekßvß metoda main(), je to pole typu String s nßzvem args. Toto pole obsahuje °et∞zcovΘ hodnoty, kterΘ se pou₧ili p°i spuÜt∞nφ vaÜeho programu. Pokud vßm nenφ p°esn∞ jasnΘ co myslφm, tak je to stejnΘ jako kdy₧ nap°. pou₧φvßte n∞jak² p°φkaz v p°φkazovΘ interpreteru, t°eba p°φkaz cp (copy) oΦekßvß dva argumenty, nap°.: c:\>cp test.txt c:\documents, a prßv∞ tyto dva argumenty se p°edajφ jako pole obsahujφcφ dva °et∞zce metod∞ main(). Te∩ u₧ by vßm mohla b²t celß deklarace metody main() jasnß, pokud ne, stejn∞ si ji jeÜt∞ budeme probφrat p°i vysv∞tlovßnφ metod. UrΦit∞ jste se takΘ vÜimli prom∞nnΘ length. Tuto prom∞nnou vlastnφ ka₧d² odkaz a obsahuje poΦet prvku v poli na kterΘ odkazuje. U prom∞nnΘ typu pole ne°φkßte p°i deklaraci, kolik mß mφt prvk∙, ale pouze ji pole p°i°adφte, to znamenß, ₧e jednou ji p°i°adφte pole o velikosti 10 prvk∙ a hned jak ho vyu₧ijete, m∙₧ete tomu stejnΘmu odkazu p°i°adit ·pln∞ novΘ pole t°eba o 500 prvcφch. Pro kompletnφ vysv∞tlenφ uvedu pßr p°φklad∙:
Te∩ se vrhn∞me na komplexn∞jÜφ p°φklad, kter² pou₧φvß jak pole, tak i mnoho v∞cφ co u₧ umφte, tak₧e ho peΦliv∞ prozkoumejte a t°eba n∞jak upravte.
Tento p°φklad je ukßzkou vyu₧itφ vÜech v∞cφ, co jste se doposud nauΦili. ┌pln∞ vÜechny v∞ci sice neznßte, ale ty kterΘ neznßte myslφm ₧e z tohoto p°φkladu pochopφte. Na zaΦßtku je importovßn balφk java.io, o balφcφch si budeme povφdat n∞kdy p°φÜt∞. Statickß metoda System.in.read() vracφ jeden p°eΦten² bajt z konzole. Tento p°φklad je urΦen k experimentovßnφ tak₧e se toho nebojte. Pokud vßm n∞co nebude fungovat, poÜlete mi zdrojov² k≤d a jß se na n∞j podφvßm. Na zaΦßtku jsem °φkal, ₧e existujφ i vφcerozm∞rnß pole, ale zatφm jsem o nich nic ne°ekl, te∩ to napravφm. ZaΦneme u polφ dvourozm∞rn²ch. Dvourozm∞rnΘ pole si lze p°edstavit jako pole jednorozm∞rn²ch polφ.
Na prvnφ pohled je z°ejm² rozdφl mezi deklaracφ jednorozm∞rnΘho a dvourozm∞rnΘho pole. Zkrßtka pokud deklarujete jednorozm∞rnΘ pole, napφÜet jeden pßr hranat²ch zßvorek a s ka₧d²m dalÜφm rozm∞rem poΦet pßr∙ zßvorek p°ib²vß, u dvourozm∞rnΘho samoz°ejm∞ dva pßry. U vφcerozm∞rn²ch polφ je jeÜt∞ jedna zajφmavost a to ta, ₧e p°i vytvß°enφ pole staΦφ specifikovat pouze prvnφ index.
Nßsledujφcφ p°φklad vytvo°φ pole, kterΘ bude mφt dva prvky a t∞mi budou pole o t°ech prvcφch.
V nßsledujφcφ tabulce mßte nßzornou ukßzku p°edeÜlΘho pole v tabulce. Horizontßlnφ tuΦnß Φφsla oznaΦujφ druh² index dvourozm∞rnΘho pole a vertikßlnφ prvnφ index pole.
Pokud mßte stßle nemßte ·pln∞ jasno, jak dvourozm∞rnΘ pole funguje, p°edstavte si Ükolnφ rozvrh (nebo pracovnφ, ale rozvrh), ten by se dob°e zapsal do dvourozm∞rnΘho pole. Pokud by m∞li vÜechny dny stejn² poΦet hodin, bylo by to pravidelnΘ dvourozm∞rnΘ pole, kterΘ by m∞lo jednotlivΘ dny jako prvnφ index a jednotlivΘ hodiny jako druh² index. Nap°φklad pole pro rozvrh, kter² by byl od pond∞lφ do pßtku a ka₧d² den osm hodin, by vypadalo takto.
Do tohoto pole byste t°eba mohli zaznamenßvat navÜtφvenΘ hodiny :-). Zßv∞r V tomto dφle jsme probrali pole a r∙znΘ v∞ci s nimi, ale jeÜt∞ nßm n∞co zbylo na p°φÜt∞. |
||||||||||||||||||||||||||||||||||||||||||||||||||