Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 7 Arrays (Nizovi).

Similar presentations


Presentation on theme: "Chapter 7 Arrays (Nizovi)."— Presentation transcript:

1 Chapter 7 Arrays (Nizovi)

2 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 ArrayList Poligone i izlomljene linije Dogadjaje misa i dogadjaje tastature © 2004 Pearson Addison-Wesley. All rights reserved

3 Pregled Deklarisanje i koristenje nizova Nizovi objekata
Liste promjenljive duzine koje sadrze parametre Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tastature © 2004 Pearson Addison-Wesley. All rights reserved

4 Cio niz ima jedinstveno ime Svaka vrijednost ima numericki indeks
Nizovi Niz je uredjena lista vrijednosti scores Cio niz ima jedinstveno ime Svaka vrijednost ima numericki indeks 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

5 Nizovi Pojedinacna vrijednost u nizu se navode koristeci ime niza iza 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

6 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

7 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

8 Nizovi Drugi nacin opisa niza scores: 79 87 94 82 67 98 81 74 91
© 2004 Pearson Addison-Wesley. All rights reserved

9 int[] scores = new int[10];
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

10 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

11 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 BasicArray.java (strana 372) © 2004 Pearson Addison-Wesley. All rights reserved

12 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 ArrayIndexOutOfBoundsException ako je neki indeks niza van granica Ovo se naziva automatska provjera granica © 2004 Pearson Addison-Wesley. All rights reserved

13 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

14 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 ReverseOrder.java (strana 375) Vidi LetterCount.java (strana 376) © 2004 Pearson Addison-Wesley. All rights reserved

15 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

16 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[] letterGrades = {'A', 'B', 'C', 'D', ’F'}; © 2004 Pearson Addison-Wesley. All rights reserved

17 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

18 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

19 Pregled Deklaracija i koristenje nizova Nizovi objekata
Liste promjenljive duzine koje sadrze parametre Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tastature © 2004 Pearson Addison-Wesley. All rights reserved

20 String[] words = new String[5];
Nizovi objekata Elementi niza mogu biti reerence na objekte Slijedeca deklaracija rezervise prostor za cuvanje 5 referenci na objekte tipa String 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

21 System.out.println (words[0]);
Nizovi objekata Niz words nakon sto je inicijalno deklarisan: words - Na ovom mjestu, slijedece reference moraju javiti NullPointerException: System.out.println (words[0]); © 2004 Pearson Addison-Wesley. All rights reserved

22 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

23 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

24 Nizovi objekata Slijedeci primjer kreira niz objekata tipa Grade, svaki sa predstavljanjem stringa i sa numerickom donjom medjom Vidi GradeRange.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

25 Nizovi objekata UML diagram za program Tunes: * Tunes CDCollection CD
+ main (args : String[]) : void CDCollection - collection : CD[] - count : int - totalCost : double + addCD (title : String, artist : String, cost : double, tracks : int) : void + toString() : String - increaseSize() : void CD - title : String - artist : String - cost : double - tracks : int * 1 © 2004 Pearson Addison-Wesley. All rights reserved

26 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 StateEval pennsylvania texas arizona Ovi stringovi se cuvaju na poljima indeksa 0-2 niza parametara metode main Vidi NameTag.java (strana 393) © 2004 Pearson Addison-Wesley. All rights reserved

27 Pregled Deklarisanje i koristenje nizova Nizovi objekata
Liste promjenljive duzine sa parametrima Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tastature © 2004 Pearson Addison-Wesley. All rights reserved

28 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 mean1 = average (42, 69, 37); // drugi poziv usrednjava sedam vrijednosti mean2 = average (35, 43, 93, 23, 40, 21, 75); © 2004 Pearson Addison-Wesley. All rights reserved

29 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

30 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 Elementa Ime niza © 2004 Pearson Addison-Wesley. All rights reserved

31 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

32 Parametarske liste promjenljive duzine
Tip parametra moze biti proizvoljan prosti tip ili tip objekta public void printGrades (Grade ... grades) { for (Grade letterGrade : grades) System.out.println (letterGrade); } © 2004 Pearson Addison-Wesley. All rights reserved

33 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

34 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 VariableParameters.java (strana 396) Vidi Family.java (strana 397) © 2004 Pearson Addison-Wesley. All rights reserved

35 Pregled Deklarisanje i koristenje nizova Nizovi i objekti
Parametarske liste promjenljive duzine Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved

36 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

37 Dvodimenzionalni nizovi
Da budemo precizni, u Javi je dvodimenzionalni niz jedan niz 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

38 Dvodimenzionalni nizovi
Izraz Tip Opis tabela int[][] 2D niz cijelih brojeva, ili niz nizova cijelih brojeva tabela[5] int[] Niz cijelih brojeva tabela[5][12] int Cio broj Vidi TwoDArray.java (strana 399) Vidi SodaSurvey.java (strana 400) © 2004 Pearson Addison-Wesley. All rights reserved

39 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

40 Pregled Deklarisanje i koristenje nizova Nizovi i objekti
Parametarske liste promjenljive duzine Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved

41 Klasa ArrayList Klasa ArrayList 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 ArrayList Stavise, neki objekat ArrayList raste i skuplja se po potrebi, prilagodjavajuci svoj kapacitet prema potrebi © 2004 Pearson Addison-Wesley. All rights reserved

42 Klasa ArrayList 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

43 ArrayList<Family> reunion = new ArrayList<Family>
Klasa ArrayList ArrayList 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 ArrayList da prihvata poseban tip objekta Slijedeca deklaracija kreira objekat ArrayList koji cuva samo objekte Family ArrayList<Family> reunion = new ArrayList<Family> Ovo je primjer generisanja, koji ce dalje biti definisan u glavi 12 © 2004 Pearson Addison-Wesley. All rights reserved

44 Efikasnost ArrayList Klasa ArrayList 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

45 Pregled Deklarisanje i koristenje nizova Nizovi objekata
Liste promjenljive duzine sa parametrima Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved

46 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 RocketPanel.java (strana 410) © 2004 Pearson Addison-Wesley. All rights reserved

47 Klasa Polygon Klasa Polygon moze takodje biti koristena za definisanje i crtanje poligona Ona je dio paketa java.awt Verzije preopterecenih metoda Polygon i fillPolygon uzimaju pojedinacni objekat tipa Polygon kao parametar umjesto niza koordinata Objekat Polygon inkapsulira koordinate poligona © 2004 Pearson Addison-Wesley. All rights reserved

48 Pregled Deklarisanje i koristenje nizova Nizovi objekata
Liste promjenljive duzine sa parametrima Dvodimenzionalni nizovi Klasa ArrayList Poligoni i izlomljene linije Dogadjaji misa i dogadjaji tipke © 2004 Pearson Addison-Wesley. All rights reserved

49 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

50 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 MouseListener i MouseMotionListener Objekat MouseEvent se salje odgovarajucoj metodi kada se desi dogadjaj misa © 2004 Pearson Addison-Wesley. All rights reserved

51 Dogadjaj misa Za dati program, mi mozemo voditi racuna samo o jednom ili dva dogadjaja misa Da bismo zadovoljili implementaciju implementaciju slusaoca, moramo uvesti prazan metod za neiskoristene dogadjaje Vidi Dots.java (strana 413) Vidi DotsPanel.java (strana 414) © 2004 Pearson Addison-Wesley. All rights reserved

52 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 RubberLines.java (strana 417) Vidi RubberLinesPanel.java (strana 418) © 2004 Pearson Addison-Wesley. All rights reserved

53 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 KeyListener Objekat KeyEvent je poslan odgovarajucoj metodi kada se desi dogadjaj tipke © 2004 Pearson Addison-Wesley. All rights reserved

54 Dogadjaj tipke Komponenta koja generise dogadjaj tipke je ona koja trenutno ima fokus na tastaturi (keyboard focus) Konstante u klasi KeyEvent 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 DirectionPanel.java (strana 422) © 2004 Pearson Addison-Wesley. All rights reserved

55 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 ArrayList Poligone i izlomljene linije Dogadjaje misa i dogadjaje tastature © 2004 Pearson Addison-Wesley. All rights reserved


Download ppt "Chapter 7 Arrays (Nizovi)."

Similar presentations


Ads by Google