NIZOVI
Kod osnovnih ugrađenih Java tipova podataka koje smo do sada upoznali svaki identifikator odgovara jednoj promenljivoj. Međutim, kada želimo da rukujemo skupom vrednosti istog tipa - npr. 1000 prvih faktorijela - nemoguće je i nepraktično da se svaki pojedinačno imenuje. Niz je način kako se to rešava.
Niz je imenovana grupa promenljivih istog tipa. Svaka promenljiva u nizu se naziva element niza i pristupa joj se pomoću indeksa. Indeks je pozicija elementa u odnosu na početak niza. Indeksi (pozicije) počinju od 0; tako prvi element ima indeks 0, drugi 1 i tako redom. Indeks može biti bilo koji izraz koji daje int (celobrojnu) vrednost 0 ili veću.
Deklaracija niza je zadavanje imena promenljive niza:
int[] mesec; // originalna notacija
int mesec[]; // alternativna notacija
Na ovaj način nije određen broj elemenata i time nije dodeljena nikakva memorija nizu, samo je imenovana refenca na niz (koja sadrži adresu niza);
Nazad na početak: 06. Nizovi - jednodimenzioni
Definicija niza pravi niz (definiše mu se dužina, dodeljuje memorija i upisuje referenca u promenljivu niza). Ovako stvoreni niz se inicijalizuje na podrazumevanu vrednost automatski (za numeričke vrednosti na 0
ili 0.0
, logičke na false
, znakovne na ‘\u0000’
).
mesec = new int [12]; // definicija niza od 12 promenljivih tipa int
Deklaracija i definicija mogu se izvršiti i u jednom koraku:
int[] mesec = new int [12];
char[] slovo = new char [30];
double[] srednja_ocena = new [33];
Pristup elementima niza se vrši pomoću promenljive niza i indeksa elementa u nizu. Peti element niza mesec referišemo kao mesec[4]
. Java proverava da li su vrednosti indekasa koji se koriste ispravne. U slučaju da nisu (indeks manji od nula ili veći od broja elemenata niza) pojaviće se izuzetak. Izuzeci su način da se signalizira greška prilikom izvršavanja programa i različitim greškama odgovaraju različiti izuzeci. U ovom slučaju se izuzetak naziva IndexOutOfBoundsException
. Kada se pojavi ovaj izuzetak program prekida izvršavanje (i može preći na obradu izuzetaka, ako je prethodno definisana - o tome kasnije).
Promenljiva niza je odvojena od samog niza. Moguće je koristiti promenljivu niza za referenciranje različitih nizova u različitim tačkama u programu.
Primer
int[] temperatura = new int [31]; // dodeljivanje 31 celobrojnih elemenata
...
temperatura = new int [365]; //novo dodeljivanje 365 elemenata - ovo je novi niz
Nazad na početak: 06. Nizovi - jednodimenzioni
Inicijalizacija nizova se može izvršiti pri samoj deklaraciji i definiciji, kao na primer:
int[] temperatura = {22, 23, 26, 28, 25, 21, 18, 17}; //inicijalizacija niza od 8 elemenata
Na ovaj način se veličina niza određuje brojem inicijalnih vrednosti, tako da je potrebno navesti inicijalne vrednosti za sve elemente niza. Ako je potrebno navesti inicijalne vrednosti samo za neke elemente niza, onda se dodeljuje vrednost određenim elementima:
int[] temperatura = new int[365];
temperatura[0] = 22;
temperatura[7]=18;
Niz se može inicijalizovati na još jedan način, drugim postojećim nizom:
int[] temperatura = {22, 23, 26, 28, 25, 21, 18, 17};
int[] dnevna_temp = temperatura;
Primena. Elementi nizova se koriste kao i obične promenljive istog tipa.
Primer unosa elemenata niza,
Scanner ul=new Scanner(System.in);
System.out.println("duzina niza:");
int duzina=ul.nextInt();
int [] niz = new int [duzina];
for (int i =0; i<duzina; i++){
System.out.println("niz["+i+"]=");
niz[i]=ul.nextInt();
i ispisa elemenata niza
System.out.println("El. niza duzine "+duzina+" su:");
for (int i =0; i<duzina; i++)
System.out.println("niz["+i+"]="+niz[i]);
Primer, izračunavanje sume i srednje vrednosti elemenata niza:
int [] temp = new int [31];
double suma=0.0, srednjaVrednost=0.0;
...
for (int i =0; i<31; i++)
suma += temp[i];
srednjaVrednost= suma / 31;
int [] temp = new int [31];
double suma=0.0, srednjaVrednost=0.0;
...
for (int i =0; i<temp.lenght; i++)
suma += temp[i];
srednjaVrednost = suma / temp.lenght;
Prvi primer koristi eksplicitnu dužinu niza, što nije preporučljivo. Naknadne izmene dužine niza mogu dovesti do toga da se ne promene sve vrednosti gde se koristi dužina i dovesti do greške. Dužina niza se može referencirati upotrebom lenght
člana kao u drugom primeru.
Nazad na početak: 06. Nizovi - jednodimenzioni
Vežbe
I Podaci o elementima niza
Z6.I.1. Izračunati sumu i srednju vrednost elemenata niza
a) svih.
b) pozitivnih,
c) deljivih sa 5,
d) negativnih i neparnih.
Z6.I.2. Najmanji, najveći element niza
a) najmanji,
b) najveći,
c) najmanji i najveći po apsolutnoj vrednosti,
d) indeks najmanjeg / najvećeg elementa,
e) najveći element. Koliko ima takvih elemenata.
- Kada je poznata dužina niza,
- Niz se završava unosom vrednosti 0 za vrednost elementa niza
Z6.I.3. Koji element niza (i njegov indeks) je najbliži (po apsolutnoj vrednosti) srednjoj vrednosti niza.
Z6.I.4. Koliko elemenata niza je veće, a koliko manje od srednje vrednosti niza.
Nazad na početak: 06. Nizovi - jednodimenzioni
II Modifikacija niza
Z6.II.1.
a) Pomnožiti svaki element niza sa k
b) Dodati na svaki element niza k
i prikazati novodobijeni niz.
Z6.II.2. Zameniti sve:
a) neparne elemente niza nulama.
b) negativne elemente njihovim apsolutnim vrednostima.
Z6.II.3. Zameniti mesta:
a) n-tom i m-tom,
b) najvećem i najmanjem
elementu niza.
Z6.II.4. Obrnuti redosled elemenata niza
Z6.II.5. Urediti niz u:
a) opadajući,
b) rastući,
c) nerastući,
d) neopadajući.
Z6.II.6. Iz niza izbaciti:
a) maksimalne i minimalne elemente,
b) sve negativne (parne) elemente.
Z6.II.7. Iz niza izbaciti sve elemente čija je vrednost jednaka k.
Ako nema takvih elemenata, onda izbaciti element koji je najbliži k po apsolutnoj vrednosti.
Z6.II.8. U uređeni niz dodati novih k elemenata (sa tastature) tako da niz ostane uređen.
Nazad na početak: 06. Nizovi - jednodimenzioni
III Jedan niz u jedan niz
Z6.III.1. Iskopirati elemente niza A u niz B.
Z6.III.2. Formirati niz B tako što se elementi niza A:
a) pomnože sa k,
b) uvećaju za k.
Z6.III.3. Formirati niz B tako što se pozitivni elementi niza A iskopiraju, a na mesto negativnih elemenata upisuje 0.
Z6.III.4. Formirati niz B od:
a) negativnih,
b) parnih,
elemenata niza A.
Z6.III.5. Formirati niz B od elemenata niza A koji su veći od srednje vrednosti.
Nazad na početak: 06. Nizovi - jednodimenzioni
IV Jedan niz u više nizova
Z6.IV.1. Formirati nizove B i C tako što se elementi niza A:
a) pomnože / podele sa k,
b) uvećaju / umanje za k.
Z6.IV.2. Formirati nizove B i C tako što se u B pozitivni elementi niza A iskopiraju, a na mesto negativnih elemenata upisuje 0, a u C se kopiraju negativni.
Z6.IV.3. Formirati nizove B i C od:
a) negativnih / pozitivnih,
b) parnih / neparnih,
elemenata niza A.
Z6.IV.4. Formirati nizove B i C od elemenata niza A koji su veći / manji od srednje vrednosti.
Z6.IV.3. Formirati nizove B, C i D od elemenata niza A tako što se u:
- B kopiraju elementi deljivi sa 3,
- C kopiraju elementi koji imaju ostatak 1 pri deljenju sa 3,
- D kopiraju elementi koji imaju ostatak 2 pri deljenju sa 3.
Nazad na početak: 06. Nizovi - jednodimenzioni
V Više nizova u jedan niz
Z6.V.1. Formirati niz C tako što se na niz A nadovezuje niz B. Kolika je dužina niza C.
Z6.V.2. Formirati niz C učešljavanjem elemenata nizova A i B. A i B su iste dužine.
Z6.V.3. Kao prethodni, za različite dužne nizova A i B.
a) kada ponestane elemenata iz kraćeg niza, dodavati 0,
b) kada ponestane elemenata iz kraćeg niza, dodavati samo elemente dužeg niza.
Z6.V.4. Nizovi A, B, C su dužine n. Formirati C, tako da je i-ti element C:
a) srednja vrednost i-tih elemenata A i B,
b) apsolutna vrednost razlike,
c) veći
Z6.V.5. C=A+B.
Nazad na početak: 06. Nizovi - jednodimenzioni
VI Primena u zadacima
Z6.VI.1. Meri se temperatura godinu dana u podne i u ponoć i podaci se smeštaju u nizove Podne i Ponoc. Odrediti:
a) koja je bila najveća / najmanja temperatura, koliko puta i kada;
b) koja je bila prosečna temperatura za tu godinu;
c) koliko puta je temperatura bila manja od -10o C, a koliko puta veća od +40 oC.
Z6.VI.2. Meri se temperatura 5 godina u podne i podaci se smeštaju u nizove A, B, C, D i E. Odrediti:
a) najveću i najmanju temperaturu u ovom periodu, i koje je godine bila;
b) prosečnu temperaturu za svaku godinu;
c) prosečnu temperaturu u 5 godina za svaki datum (i podatke smestiti u niz F).
Z6.VI.3. Gosti se prilikom dolaska na zabavu prijavljuju, a prilikom odlaska odjavljuju sa zabave. Odrediti:
a) koliko je bilo gostiju u ponoć,
b) u kom trenutku je bilo najviše, a u kom trenutku najmanje gostiju,
c) da li su se osobe oA i oB mogle sresti na zabavi.
Pretpostavlja se da je zabava počela u 21h i trajala do 01h. Tačnost evidencije dolaska i odlaska je 1 minut.