Chapter 7 Arrays Nizovi Nizovi Nizovi su objekti
Chapter 7 Arrays (Nizovi)
Nizovi • Nizovi su objekti koji nam pomazu da organizujemo velike kolicine informacija • U glavi 7 razmatramo: § § § § Deklaraciju i koristenje niza Provjeru granica i kapaciteta Nizove koji sadrze reference na objekte Liste promjenljive duzine koje sadrze parametre Visedimenzionalne nizove Klasu Array. List Poligone i izlomljene linije Dogadjaje misa i dogadjaje tastature © 2004 Pearson Addison-Wesley. All rights reserved 2
Pregled Deklarisanje i koristenje nizova Nizovi objekata Liste promjenljive duzine koje sadrze parametre Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tastature © 2004 Pearson Addison-Wesley. All rights reserved 3
Nizovi • Niz je uredjena lista vrijednosti Svaka vrijednost ima numericki indeks Cio niz ima jedinstveno ime 0 scores 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91 Niz duzine N je indeksiran od nule do N-1 Ovaj niz sadrzi 10 vrijednosti koje su indeksirane od 0 do 9 © 2004 Pearson Addison-Wesley. All rights reserved 4
Nizovi • Pojedinacna vrijednost u nizu se navode koristeci ime niza kojeg slijedi indeks u uglastim zagradama • Na primjer, izraz scores[2] referise vrijednost 94 (3 -ca vrijednost u nizu) • Taj izraz predstavlja mjesto za cuvanje cijelog broja i moze se koristiti kad god se koristi cjelobrojna varijabla © 2004 Pearson Addison-Wesley. All rights reserved 5
Nizovi • Na primjer, elementu niza moze se dodijeliti vrijednost, moze se odstampati ili koristiti u racunu: scores[2] = 89; scores[prvi] = scores[prvi] + 2; mean = (scores[0] + scores[1])/2; System. out. println (“Vrh = " + scores[5]); © 2004 Pearson Addison-Wesley. All rights reserved 6
Nizovi • Vrijednosti sadrzane u nizu nazivaju se elementi niza • Niz sadrzi vise vrijednosti istog tipa – tip elementa • Tip elementa moze biti prost tip ili referenca objekta • Dakle, mozemo kreirati niz cijelih, niz karaktera, niz objekata tipa String, niz objekata tipa Coin, itd. • U Javi, sam niz je objekat koji mora biti instanciran © 2004 Pearson Addison-Wesley. All rights reserved 7
Nizovi • Drugi nacin opisa niza scores: scores 79 87 94 82 67 98 87 81 74 91 © 2004 Pearson Addison-Wesley. All rights reserved 8
Deklaracija nizova • Niz scores mogao bi biti deklarisan na slijedeci nacin: int[] scores = new int[10]; • Tip varijable scores je int[] (niz cijelih) • Primijetimo da tip niza ne odredjuje njegovu duzinu, ali svaki objekat tog tipa ima odredjenu duzinu • Referentna varijabla scores postavlja se na new array objekat koji moze sadrzati 10 cijelih © 2004 Pearson Addison-Wesley. All rights reserved 9
Deklaracija nizova • Neki drugi primjeri deklaracije nizova: float[] cijene = new float[500]; boolean[] flags; flags = new boolean[20]; char[] kodovi = new char[1750]; © 2004 Pearson Addison-Wesley. All rights reserved 10
Koristenje nizova • Verzija for petlje moze se koristiti kao iterator kod obrade elemenata niza for (int score : scores) System. out. println (score); • Ovo vrijedi samo kada obradjujemo sve elemente niza od vrha (najmanji indeks) do dna (najveci indeks) • Vidi Basic. Array. java (strana 372) © 2004 Pearson Addison-Wesley. All rights reserved 11
Provjera granica • Kada je niz kreiran on ima fiksiranu duzinu • Indeks koji se koristi kao referenca mora odredjivati ispravnu vrijednost • To znaci, indeks mora biti u rasponu od 0 do N-1 • Java interpreter javlja Array. Index. Out. Of. Bounds. Exception ako je neki indeks niza van granica • Ovo se naziva automatska provjera granica © 2004 Pearson Addison-Wesley. All rights reserved 12
Provjera granica • Na primjer, ako niz codes ima 100 vrijednosti, on moze biti indeksiran koristeci brojeve od 0 do 99 • Ako vrijednost count iznosi 100, tada ce slijedeca referenca prouzrokovati javljanje greske: System. out. println (codes[count]); • Uobicajeno je uvesti off-by-one gresku kada se koriste nizovi problem for (int index=0; index <= 100; index++) codes[index] = index*50 + epsilon; © 2004 Pearson Addison-Wesley. All rights reserved 13
Provjera granica • Svaki niz objekat ima javnu (public) konstantu zvanu length koja sadrzi duzinu niza • Ona se poziva koristeci ime niza: scores. length • Primijetimo da length sadrzi broj elemenata, a ne najveci indeks • Vidi Reverse. Order. java (strana 375) • Vidi Letter. Count. java (strana 376) © 2004 Pearson Addison-Wesley. All rights reserved 14
Alternativna sintaksa za niz • Zagrade za tip niza mogu se povezati sa tipom elementa ili sa imenom niza • Dakle, slijedece dvije deklaracije su ekvivalentne: float[] prices; float prices[]; • Prvi format je uglavnom citljiviji i trebalo bi ga koristiti © 2004 Pearson Addison-Wesley. All rights reserved 15
Lista za inicijalizaciju • Lista za inicijalizaciju moze biti koristena za inicijalizaciju i popunjavanje niza u jednom koraku • Vrijednosti su ogranicene zagradama i odvojene zarezima • Primjeri: int[] units = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476}; char[] letter. Grades = {'A', 'B', 'C', 'D', ’F'}; © 2004 Pearson Addison-Wesley. All rights reserved 16
Lista za inicijalizaciju • Kada se koristi lista za inicijalizaciju tada: § Operator new se ne koristi § Vrijednost duzine se ne navodi • Duzina niza je odredjena brojem clanova u listi za inicijalizaciju • Lista za inicijalizaciju moze biti koristena samo prilikom deklaracije niza • Vidi Primes. java (strana 381) © 2004 Pearson Addison-Wesley. All rights reserved 17
Nizovi kao parametri • Cio niz moze se predati kao parametar nekoj metodi • Slicno svakom drugom objektu, referenca na niz se prenosi, cineci da aktuelni parametar i formalni parametar postaju aliasi jedan drugog • Dakle, mijenjajuci neki elemenat niza u metodi mijenja i original • Pojedinacni elemenat niza moze se takodje predati metodi, u kom slucaju je tip formalnog parametra isti kao tip elementa © 2004 Pearson Addison-Wesley. All rights reserved 18
Pregled Deklaracija i koristenje nizova Nizovi objekata Liste promjenljive duzine koje sadrze parametre Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tastature © 2004 Pearson Addison-Wesley. All rights reserved 19
Nizovi objekata • Elementi niza mogu biti reerence na objekte • Slijedeca deklaracija rezervise prostor za cuvanje 5 referenci na objekte tipa String[] words = new String[5]; • Ona sama NE kreira objekte tipa String • Inicijalno niz objekata sadrzi null reference • Svaki objekat u nizu mora biti instanciran zasebno © 2004 Pearson Addison-Wesley. All rights reserved 20
Nizovi objekata • Niz words nakon sto je inicijalno deklarisan: words - • Na ovom mjestu, slijedece reference moraju javiti Null. Pointer. Exception: System. out. println (words[0]); © 2004 Pearson Addison-Wesley. All rights reserved 21
Niz objekata • Nakon sto su neki objekti tipa String kreirani i sacuvani u nizu: “friendship” words “loyalty” “honor” - © 2004 Pearson Addison-Wesley. All rights reserved 22
Nizovi objekata • Zapamtimo da objekti tipa String mogu biti kreirani koriscenjem literala • Slijedeca deklaracija kreira niz objekata zvani verbs i puni ga sa cetiri objekta String koji su kreirani pomocu literala String[] verbs = {"play", "work", "eat", "sleep"}; © 2004 Pearson Addison-Wesley. All rights reserved 23
Nizovi objekata • Slijedeci primjer kreira niz objekata tipa Grade, svaki sa predstavljanjem stringa i sa numerickom donjom medjom • Vidi Grade. Range. java (strana 384) • Vidi Grade. java (strana 385) • Pogledajmo sada primjer koji upravlja kolekcijom CD objekata • Vidi Tunes. java (strana 387) • Vidi CDCollection. java (strana 388) • Vidi CD. java (strana 391) © 2004 Pearson Addison-Wesley. All rights reserved 24
Nizovi objekata • UML diagram za program Tunes: Tunes CDCollection - collection : CD[] - count : int - total. Cost : double + main (args : String[]) : void + add. CD (title : String, artist : String, cost : double, tracks : int) : void + to. String() : String - increase. Size() : void CD - title : String artist : String cost : double tracks : int 1 * + to. String() : String © 2004 Pearson Addison-Wesley. All rights reserved 25
Argumenti komandne linije • Signatura metode main pokazuje da ona uzima jedan niz objekata tipa String kao parametre • Ove vrijednosti dolaze kao argumenti comandne linije koji se zadaju pri pozivu interetera • Na primjer, slijedeci poziv interpretera predaje tri objekta tipa String u main: > java State. Eval pennsylvania texas arizona • Ovi stringovi se cuvaju na poljima indeksa 0 -2 niza parametara metode main • Vidi Name. Tag. java (strana 393) © 2004 Pearson Addison-Wesley. All rights reserved 26
Pregled Deklarisanje i koristenje nizova Nizovi objekata Liste promjenljive duzine sa parametrima Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tastature © 2004 Pearson Addison-Wesley. All rights reserved 27
Liste promjenljive duzine sa parametrima • Pretpostavimo da zelimo kreirati metodu koja obradjuje razlicite kolicine informacija pri razlicitim pozivima • Na primjer, definisimo metodu zvanu average koja vraca srednju vrijednost skupa cijelih parametara // jedan poziv usrednjava tri vrijednosti mean 1 = average (42, 69, 37); // drugi poziv usrednjava sedam vrijednosti mean 2 = average (35, 43, 93, 23, 40, 21, 75); © 2004 Pearson Addison-Wesley. All rights reserved 28
Parametarske liste promjenljive duzine • Mogli smo definisati preopterecenu verziju metode average § Losa strana: mi trebamo odvojenu verziju metode za svaki broj parametara • Mogli bi definisati metod koji prihvata jedan niz cijelih § Losa strana: treba kreirati niz i ubaciti cijele brojeve prije svakog poziva metode • Umjesto toga, Java uvodi pogodan nacin za kreiranje parametarske lise promjenljive duzine © 2004 Pearson Addison-Wesley. All rights reserved 29
Parametarske liste promjenljive duzine • Koristeci specijalnu sintaksu u listi formalnih parametara, mozemo definisati metod koji prihvata proizvoljan broj parametara istog tipa • Za svaki poziv, parametri se automatski stavljaju u jedan niz radi lakse obrade Indicira promjenljivu duzinu parametarske liste public double average (int. . . list) { // sta bilo } Tip Ime Elementa niza © 2004 Pearson Addison-Wesley. All rights reserved 30
Parametarske liste promjenljive duzine public double average (int. . . list) { double result = 0. 0; if (list. length != 0) { int sum = 0; for (int num : list) sum += num; result = (double)num / list. length; } return result; } © 2004 Pearson Addison-Wesley. All rights reserved 31
Parametarske liste promjenljive duzine • Tip parametra moze biti proizvoljan prosti tip ili tip objekta public void print. Grades (Grade. . . grades) { for (Grade letter. Grade : grades) System. out. println (letter. Grade); } © 2004 Pearson Addison-Wesley. All rights reserved 32
Parametarske liste promjenljive duzine • Metod koji moze prihvatiti promjenljiv broj parametara moze takodje prihvatiti i druge parametre • Slijedeci metod prihvata neki int, objekat tipa String, kao i promjenljiv broj double vrijednosti u jedan niz zvani nums public void test (int count, String name, double. . . nums) { // whatever } © 2004 Pearson Addison-Wesley. All rights reserved 33
Parametarske liste promjenljive duzine • Promjenljivi broj parametara mora biti zadnji od formalnih argumenata • Pojedinacna metoda ne moze prihvatiti dva skupa sa promjenljivim brojem parametara • Konstruktor se takodje moze postaviti da prihvata promjenljiv broj parametara • Vidi Variable. Parameters. java (strana 396) • Vidi Family. java (strana 397) © 2004 Pearson Addison-Wesley. All rights reserved 34
Pregled Deklarisanje i koristenje nizova Nizovi i objekti Parametarske liste promjenljive duzine Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved 35
Dvodimenzionalni nizovi • Jednodimenzionalni niz sadrzi listu elemenata • Dvodimenzionalni niz mozemo shvatiti kao tabelu sa redovima i kolonama one dimension two dimensions © 2004 Pearson Addison-Wesley. All rights reserved 36
Dvodimenzionalni nizovi • Da budemo precizni, u Javi je dvodimenzionalni niz jedan nizova • Dvodimenzionalni niz je deklarisan navodjenjem duzine svake dimenzije posebno: int[][] scores = new int[12][50]; • Elemenat niza se navodi koristeci dvije vrijednosti indeksa: value = scores[3][6] • Niz koji se cuva u jednom redu moze biti odredjen koriscenjem jednog indeksa © 2004 Pearson Addison-Wesley. All rights reserved 37
Dvodimenzionalni nizovi Izraz tabela Tip int[][] Opis tabela[5] int[] Niz cijelih brojeva tabela[5][12] int Cio broj 2 D niz cijelih brojeva, ili nizova cijelih brojeva • Vidi Two. DArray. java (strana 399) • Vidi Soda. Survey. java (strana 400) © 2004 Pearson Addison-Wesley. All rights reserved 38
Visedimenzionalni nizovi • Neki niz moze imati vise dimenzija – ako on ima vise od jedne dimenzije, on se naziva visedimenzionalni niz • Svaka dimenzija dijeli prethodnu na odredjeni broj elemenata • Svaka dimenzija ima vlastitu konstantu length • Posto je svaka dimenzija neki niz referenci nizova, nizovi u jednoj dimenziji mogu imati razne duzine § Ovi se ponekad nazivaju neporavnati nizovi (ragged arrays) © 2004 Pearson Addison-Wesley. All rights reserved 39
Pregled Deklarisanje i koristenje nizova Nizovi i objekti Parametarske liste promjenljive duzine Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved 40
Klasa Array. List • Klasa Array. List je dio paketa java. util • Slicno nizu, ona moze sadrzati listu vrijednosti i referenci od kojih svaka koristi jedan indeks • Ipak, ne moze se koristiti sintaksa sa uglastim zagradama za neki objekat tipa Array. List • Stavise, neki objekat Array. List raste i skuplja se po potrebi, prilagodjavajuci svoj kapacitet prema potrebi © 2004 Pearson Addison-Wesley. All rights reserved 41
Klasa Array. List • Elementi mogu biti ubaceni ili izbaceni iz liste jednim pozivom metode • Kada je jedan elemenat ubacen, ostali elementi se “razmicu" da naprave mjesto • Slicno, kada je jedan elemenat izbacen, lista se “zbija" da zatvori prazninu • Indeksi elemenata se prilagodjavaju na odgovarajuci nacin © 2004 Pearson Addison-Wesley. All rights reserved 42
Klasa Array. List • Array. List sadrzi reference na klasu Object, koja joj dozvoljava da cuva bilo koju vrstu objekta • Vidi Beatles. java (strana 405) • Mozemo takodje definisati neki objekat tipa Array. List da prihvata poseban tip objekta • Slijedeca deklaracija kreira objekat Array. List koji cuva samo objekte Family Array. List<Family> reunion = new Array. List<Family> • Ovo je primjer generisanja, koji ce dalje biti definisan u glavi 12 © 2004 Pearson Addison-Wesley. All rights reserved 43
Efikasnost Array. List • Klasa Array. List je implementirana koristeci niz • Nizom se manipulise tako da indeksi ostaju neperkidni u toku dodavanja ili uklanjanja elemenata • Ako se elementi dodaju i uklanjaju sa kraja liste, ovaj postupak je dovoljno efikasan • Ali ako se elementi ubacuju i uklanjaju sa cela ili iz sredine liste, preostali elementi su siftani © 2004 Pearson Addison-Wesley. All rights reserved 44
Pregled Deklarisanje i koristenje nizova Nizovi objekata Liste promjenljive duzine sa parametrima Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved 45
Poligoni i izlomljena linije • Nizovi mogu biti korisni u grafickoj obradi • Na primjer, oni mogu biti koristeni za cuvanje liste koordinata • polygon je visestrani, zatvoren oblik • Izlomljena linija je slicna poligonu osim sto krajnje tacke nisu sastavljene, a ne moze biti ni ispunjena • Vidi Rocket. java (strana 409) • Vidi Rocket. Panel. java (strana 410) © 2004 Pearson Addison-Wesley. All rights reserved 46
Klasa Polygon • Klasa Polygon moze takodje biti koristena za definisanje i crtanje poligona • Ona je dio paketa java. awt • Verzije preopterecenih metoda Polygon i fill. Polygon uzimaju pojedinacni objekat tipa Polygon kao parametar umjesto niza koordinata • Objekat Polygon inkapsulira koordinate poligona © 2004 Pearson Addison-Wesley. All rights reserved 47
Pregled Deklarisanje i koristenje nizova Nizovi objekata Liste promjenljive duzine sa parametrima Dvodimenzionalni nizovi Klasa Array. List Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved 48
Dogadjaji misa (Mouse Events) • Dogadjaji koji se odnose na misa podijeljeni su na mouse events (dogadjaje misa) i mouse motion events (dogadjaje kretanja misa) • Dogadjaji misa: mouse pressed Mis je pritisnut na doli mouse released Baton misa je pusten mouse clicked Baton misa je pritisnut na doli i pusten bez pokretanja misa izmedju operacija mouse entered Pokazivac misa je pomjeren na (preko) neke komponente mouse exited Pokazivac misa je pomjeren van neke komponente © 2004 Pearson Addison-Wesley. All rights reserved 49
Dogadjaji misa • Dogadjaji kretanja misa: mouse moved Mis je pokrenut mouse dragged Mis je pokrenut dok je mis pritisnut na doli • Slusaoci za dogadjaj misa su kreirani koristeci interfejse Mouse. Listener i Mouse. Motion. Listener • Objekat Mouse. Event se salje odgovarajucoj metodi kada se desi dogadjaj misa © 2004 Pearson Addison-Wesley. All rights reserved 50
Dogadjaj misa • Za dati program, mi mozemo voditi racuna samo o jednom ili dva dogadjaja misa • Da bismo zadovoljili implementaciju slusaoca, moramo uvesti prazan metod za neiskoristene dogadjaje • Vidi Dots. java (strana 413) • Vidi Dots. Panel. java (strana 414) © 2004 Pearson Addison-Wesley. All rights reserved 51
Dogadjaj misa • Rubberbanding je vizualni efekat u kome je neki oblik “prosiren" kada je vucen pomocu misa • U slijedecem primjeru liije se neprekidno ponovo crtaju kada je mis vucen • Vidi Rubber. Lines. java (strana 417) • Vidi Rubber. Lines. Panel. java (strana 418) © 2004 Pearson Addison-Wesley. All rights reserved 52
Dogadjaj tipke • Dogadjaj tipke (key event) se generise kada korisnik kuca na tastaturi key pressed Tipka na tastaturi je pritisnuta na doli key released Tipka na tastaturi je pustena key typed Tipka na tastaturi je pritisnuta na doli i pustena • Slusaoci za dogadjaje tipke su kreirani preko implementacije interfejsa Key. Listener • Objekat Key. Event je poslan odgovarajucoj metodi kada se desi dogadjaj tipke © 2004 Pearson Addison-Wesley. All rights reserved 53
Dogadjaj tipke • Komponenta koja generise dogadjaj tipke je ona koja trenutno ima fokus na tastaturi (keyboard focus) • Konstante u klasi Key. Event mogu biti koristene za odredjivanje koja je tipka pritisnuta • Slijedeci primjer “premjesta" sliku strelice kada korisnik ukucava tipke sa strelicama • Vidi Direction. java (strana 421) • Vidi Direction. Panel. java (strana 422) © 2004 Pearson Addison-Wesley. All rights reserved 54
Zakljucak • U glavi 7 smo diskutovali: § § § § Deklaraciju i koristenje niza Provjeru granica i kapaciteta Nizove koji sadrze reference na objekte Liste promjenljive duzine sa parametrima Visedimenzionalne nizove Klasu Array. List Poligone i izlomljene linije Dogadjaje misa i dogadjaje tastature © 2004 Pearson Addison-Wesley. All rights reserved 55
- Slides: 55