Vous êtes sur la page 1sur 19

Liste

Nizovi omoguavaju rad sa vie promenljivih bez potrebe za pojedinanim definisanjem svake
promenljive. Iako su veoma korisni, oni imaju jedan ozbiljan nedostatak: jednom kada se
inicijalizuju, kapacitet im je fiksiran. Proirenje ili smanjenje kapaciteta niza zahteva ponovnu
inicijalizaciju niza to, u optem sluaju, dovodi do brisanja svih njegovih elemenata.

Liste (dinamiki nizovi) nemaju ogranien kapacitet pa se elementi mogu dodavati i brisati po
elji. Lista moe da sadri deset, sto ili bilo koji proizvoljan broj elemenata a da ne postoji potreba
za ponovnom inicijalizacijom. Dodatna pogodnost je ta to se, pri izbacivanju elementa iz liste, ne
ostavljaju prazna mesta, pa je lista uvek cela i bez prekida.

U Javi postoji nekoliko predefinisanih klasa koje, u stvari, predstavljaju liste. Jedna od njih je i
klasa LinkedList. Pun naziv ove klase je java.util.LinkedList i potrebno ju je uvesti u program
pre nego to se moe koristiti. Jedino ogranienje koje ova klasa uvodi je to da elementi liste ne
mogu da budu prostog tipa, ve samo objekti. Svi elementi liste moraju biti objekti iste klase.
Deklaracija liste se vri na sledei nain:

LinkedList <NazivKlaseElementa> nazivPromenljive;

Pri deklaraciji, posle naziva klase koja predstavlja listu (LinkedList) pie se naziv klase iji objekti
e biti elementi liste. Naziv klase elementa se pie izmeu znakova manje od (<) i vee
od (>).

Inicijalizacija liste je veoma slina inicijalizaciji bilo kog objekta. Sa obzirom na to da liste nemaju
ogranien kapacitet, inicijalizacija je uvek ista:

nazivPromenljive = new LinkedList <NazivKlaseElementa> ();

Ako se ipak eli pokuati sa unoenjem elemenata prostog tipa u listu, mogu se koristiti tzv. klase
za obmotavanje (wrapper classes). Kao to im naziv kae, ove klase predstavljaju omota
oko vrednosti prostog tipa pa, u stvari, imaju atribut koji je prostog tipa i u koji se smeta
odgovarajua vrednost. Tako, za double vrednosti postoji klasa Double, za int klasa Integer, za
char klasa Character i za boolean klasa Boolean.

Primer 1

Sledi par primera korienja klasa za obmotavanje prostih tipova:


Double d = new Double (2.3);
System.out.println(d.doubleValue());

Integer i = new Integer (55);


System.out.println(i.intValue());

Character c = new Character ('R');


System.out.println(c.charValue());

Boolean b = new Boolean (false);


System.out.println(b.booleanValue());
Kao to se moe videti, vrednost prostog tipa se unosi pri inicijalizaciji objekta odgovarajue
obmotavajue klase, dok se ta vrednost preuzima pozivanjem neke od value metoda
(doubleValue, intValue, charValue i booleanValue).

Klasa LinkedList sadri vie gotovih metoda koje slue za unoenje u listu, izbacivanje iz liste,
pretraivanje itd. Sledi tabela metoda klase LinkedList sa odgovarajuim opisima.

Metoda Opis
add (<NazivKlase> e) Dodaje element na kraj liste (radi isto to i AddLast metoda).
add (int i, <NazivKlase> e) Unosi element u listu i to na poziciju iji je indeks jednak
i (indeksi elemenata liste kreu od nule kao kod nizova).
addFirst (<NazivKlase> e) Dodaje element na poetak liste.
addLast (<NazivKlase> e) Dodaje element na kraj liste.
clear () Brie sve elemente iz liste.
contains (Object o) Vraa TRUE ako u listi postoji element koji je isti kao uneti
objekat, a FALSE ako ne postoji (pogledati detaljniji opis nie u
tekstu).
get (int i) Vraa onaj element iz liste iji je indeks i.
getFirst () Vraa prvi element iz liste.
getLast () Vraa poslednji element iz liste.
remove (int i) Izbacuje onaj element iz liste iji je indeks i.
remove (Object o) Izbacuje onaj element iz liste koji je jednak unetom objektu.
removeFirst () Izbacuje prvi element iz liste.
removeLast () Izbacuje poslednji element iz liste.
set (int i, <NazivKlase> e) Zamenjuje element iji je indeks jednak i unetim objektom.
size () Vraa trenutni broj elemenata u listi.

Da bi se u potpunosti razumele navedene metode, potrebno je znati i sledee. Svaki element liste
ima svoj indeks. Kao i kod nizova, indeksi poinju od nule, pa je npr. indeks petog elementa
jednak 4. Na taj nain sve metode koje koriste indekse mogu da pronau tano mesto u listi na
kojem je potrebno uneti neki element, izmeniti ga ili izbaciti. Broj elemenata liste moe da varira,
ali se trenutni broj elemenata dobija pozivanjem metode size. Konano, potrebno je znati i to da
metoda contains funkcionie tako to prolazi kroz listu i uporeuje elemente liste sa unetim
objektom. Kljuna stvar je ta to ova metoda automatski poziva odgovarajuu equals metodu
da bi uporedila objekte. U pitanju je equals metoda klase koja je uneta kao element liste.

Primer 2

Napraviti javnu klasu ClanKomisije koja ima:


Privatni Atribut imePrezime.
Privatni Atribut funkcija. Poetna vrednost ovog atributa je NULL.
Odgovarajue javne get i set metode za ova dva atributa. Nedozvoljene vrednosti za prvi
atribut su NULL i prazan String (). U sluaju unosa nedozvoljenih vrednosti, potrebno je
ispisati poruku o greci na ekranu.
Redefinisanu metodu toString klase Object koja vraa String sa podacima o lanu komisije
uz odgovarajui tekst. Ako je vrednost atributa funkcija jednaka NULL, metoda samo vraa
podatke o imenu i prezimenu lana komisije. Ako nije NULL, vraaju se svi podaci o lanu
komisije.
Redefinisanu metodu equals klase Object koja kao ulazni argument prima objekat klase
Object, ali se smatra da e se zaista unositi objekti klase ClanKomisije. Metoda vraa
TRUE ako je vrednost atributa imePrezime jednaka imenu i prezimenu lana komisije koji
je unet kao ulazni argument, a u suprotnom FALSE.

Napraviti javnu klasu Komisija koja ima:


Privatni atribut clanovi koji predstavlja listu objekata klase ClanKomisije.
Javni konstruktor koji inicijalizuje atribut clanovi.
Javnu metodu koja kao ulazni parametar prima objekat klase ClanKomisije i unosi ga u
listu samo ako u listi ne postoji lan komisije sa istim imenom i prezimenom. U suprotnom,
potrebno je ispisati poruku o tome da je ta osoba ve lan komisije.
Javnu metodu sprovediPropis koja proverava da li je u komisiji pet lanova ili manje. Ako u
komisiji ima vie od 5 lanova, metoda brie listu i na ekranu ispisuje poruku o tome da je
komisija nevaea.
Javnu metodu razresiClanaKomisije koja kao ulazni parametar dobija objekat klase
ClanKomisije i izbacuje ga iz komisije.
Javnu metodu koja na ekranu ispisuje sastav komisije.

Napraviti javnu klasu TestKomisije koja kreira jedan objekat klase Komisija i u njega unosi
podatke o dva lana komisije: Pera Peric - predsednik i Mika Mikic. Ispisati sastav komisije.

public class ClanKomisije {

private String imePrezime;


private String funkcija = null;

public String getImePrezime() {


return imePrezime;
}
public void setImePrezime(String imePrezime) {
if (imePrezime!=null && !imePrezime.equals(""))
this.imePrezime = imePrezime;
else
System.out.println("Morate uneti ime");
}
public String getFunkcija() {
return funkcija;
}
public void setFunkcija(String funkcija) {
this.funkcija = funkcija;
}

public String toString(){


if (funkcija!=null)
return "Ime clana: "+imePrezime+" Funkcija: "+funkcija;
else
return "Ime clana: "+imePrezime;
}

public boolean equals(Object o){


ClanKomisije ck = (ClanKomisije)(o);
if (imePrezime.equals(ck.getImePrezime()))
return true;
else
return false;
}

import java.util.LinkedList;

public class Komisija {

private LinkedList <ClanKomisije> clanovi;

public Komisija(){
clanovi = new LinkedList<ClanKomisije>();
}

public void unesi(ClanKomisije ck){


if (clanovi.contains(ck))
System.out.println("Ta osoba se vec nalazi u komisiji");
else
clanovi.add(ck);
}

public void sprovediPropis(){


if (clanovi.size()>5){
clanovi.clear();
System.out.println("Komisija je nevazeca");
}
}

public void razresiClanaKomisije(ClanKomisije ck){


clanovi.remove(ck);
}

public void ispisi(){


for (int i=0;i<clanovi.size();i++)
System.out.println(clanovi.get(i));
}

public class TestKomisija {

public static void main(String[] args) {

Komisija k = new Komisija();

ClanKomisije ck1 = new ClanKomisije();


ck1.setImePrezime("Pera Peric");
ck1.setFunkcija("predsednik");
ClanKomisije ck2 = new ClanKomisije();
ck2.setImePrezime("Mika Mikic");

k.unesi(ck1);
k.unesi(ck2);

k.ispisi();

Klasa Komisija ima privatni atribut clanovi koji predstavlja listu objekata klase ClanKomisije.
Kao to se moe videti, inicijalizacija ove liste se vri u okviru konstruktora.

Metoda unesi unosi lana komisije u listu pozivanjem metode add. Pre unoenja, proverava se
da li lista moda ve sadri lana sa istim imenom i prezimenom. Metoda contains vri ovu
proveru tako prolazi kroz listu element po element i automatski poziva metodu equals klase
ClanKomisije da proveri jednakost svakog elementa sa unetim objektom.

Metoda sprovediPropis prvo proverava broj lanova komisije (pozivanjem metode size) pa,
ako je taj broj vei od 5, brie sve elemente iz liste (pozivanjem metode clear).

Izbacivanje elementa iz liste se vri pozivanjem neke od remove metoda. U okviru metode
razresiClanaKomisije se poziva ona remove metoda koja pronalazi element iz liste koji je
jednak unetom objektu. I ovde se jednakost proverava automatskim pozivanjem equals metode
klase ClanKomisije.

U metodi ispisi se vidi kako se prolazi kroz listu element po element. Pojedinanim elementima
liste se pristupa preko indeksa - pozivanjem metode get kojoj se prosleuje taj indeks. Kao i kod
nizova i kod lista indeksi kreu od nule.

Zadaci

Zadatak 1

Napraviti javnu klasu Student koja ima:


Privatni atribut brojIndeksa koji je dat u formi Stringa: XXXX/BB gde je XXXX broj indeksa a BB godina
upisa, npr. 0067/07, 0123/03, 0001/99.
Privatni atribut ime.
Privatni atribut prezime.
Privatni atribut ocena.
Odgovarajue javne get i set metode za ova tri atributa. Nedozvoljene vrednosti za ime, prezime i broj indeksa
se null Stringovi. Nedozvoljene vrednosti za ocenu su svi brojevi manji od 5 ili vei od 10. U sluaju pokuaja
unosa ovih nedozvoljenih vrednosti potrbno je ispisati poruku o greci na ekranu.
Redefinisanu metodu toString klase Object koja vraa String sa svim podacima o studentu (broj indeksa, ime,
prezime i ocena) uz odgovarajuu poruku.
Redefinisanu metodu equals klase Object koja kao ulazni argument prima objekat klase Object, ali se smatra
da e se zaista unositi objekti klase Student. Metoda vraa TRUE ako je broj indeksa jednak broju indeksa
studenta koji je unet kao ulazni argument, a u suprotnom FALSE.

Napraviti javnu klasu IspitnaLista koja ima:


Privatni atribut studenti koji predstavlja listu objekata klase Student.
Javni konstruktor koji inicijalizuje ovu listu (atribut studenti).
Javnu metodu daLiJeUListi koja kao ulazni argument prima objekat klase Student i proverava da li se student
sa istim brojem indeksa ve nalazi u listi. Ako se nalazi, metoda vraa TRUE a u suprotnom FALSE.
Javnu metodu dodajStudenta koja kao ulazni argument prima objekat klase Student i dodaje ga u listu.
Dodavanje se vri samo ako ulazni argument nije null i ako u listi ne postoji student sa istim brojem indeksa.
Ako je bilo koji od ovih uslova prekoraen, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu dodajStudentaNaPoetak koja kao ulazni argument prima objekat klase Student i dodaje ga u
listu i to na poetak liste. Dodavanje se vri samo ako ulazni argument nije null i ako u listi ne postoji student
sa istim brojem indeksa. Ako je bilo koji od ovih uslova prekoraen, potrebno je ispisati poruku o greci na
ekranu.
Javnu metodu dodajStudentaNaKraj koja kao ulazni argument prima objekat klase Student i dodaje ga u listu i
to na kraj liste. Dodavanje se vri samo ako ulazni argument nije null i ako u listi ne postoji student sa istim
brojem indeksa. Ako je bilo koji od ovih uslova prekoraen, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu dodajStudentaNaMesto koja kao ulazni argument prima objekat klase Student i redni broj mesta
u listi na koje potrebno ubaciti datog studenta. Dodavanje se vri samo ako ulazni argument nije null, ako u
listi ne postoji student sa istim brojem indeksa i ako je uneti redni broj u rasponu 0 duina liste-1. Ako je bilo
koji od ovih uslova prekoraen, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu izbrisiStudenta koja kao ulazni argument prima objekat klase Student i brie iz liste studenta sa
istim brojem indeksa. Brisanje se vri samo ako ulazni argument nije null i ako u listi postoji student sa istim
brojem indeksa. Ako je bilo koji od ovih uslova prekoraen, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu izbrisiStudentaSaPocetka koja nema ulazne argumente i brie prvog studenta iz liste. Brisanje se
vri samo ako lista nije prazna. Ako je lista prazna, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu izbrisiStudentaSaKraja koja nema ulazne argumente i brie poslednjeg studenta iz liste. Brisanje
se vri samo ako lista nije prazna. Ako je lista prazna, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu izbrisiStudentaSaMesta koja kao ulazni argument dobija redni broj i brie studenta iz liste koji je
na tom rednom broju u listi. Brisanje se vri samo ako lista nije prazna i ako je redni broj u opsegu 0 duina
liste-1. Ako bilo koji od ova dva uslova prekoraen, potrebno je ispisati poruku o greci na ekranu.
Javnu metodu obrisiListu koja brie sve studente iz liste.
Javnu metodu ispisiPrvog koja na ekranu ispisuje podatke prvog studenta iz liste. Ako je lista prazna, potrebno
je ispisati poruku o tome.
Javnu metodu ispisiPoslednjeg koja na ekranu ispisuje podatke poslednjeg studenta iz liste. Ako je lista prazna,
potrebno je ispisati poruku o tome.
Javnu metodu ispisi koja ispisuje sve studente iz liste tj. njihove podatke na ekranu.
Javnu metodu ispisiDesetke koja na ekranu ispisuje samo podatke o onim studentima koji su na ispitu dobili
ocenu 10.
Javnu metodu prosek koja izraunava i vraa prosenu ocenu na ispitu.
Javnu metodu ispisiStareStudente koja ispisuje podatke samo onih studenata koji su 1999. godine upisali
fakultet.

Napraviti javnu klasu TestIspitnaLista koja kreira jedan objekat klase IspitnaLista i unosi u njega sledee studente:
0001/99 Stevanovic Ivana 10, 0123/06 Petar Petrovic 6, 0021/05 Jovan Jovanovic 8. Ispisati na ekranu prosenu ocenu i
sve stare studente.

Reenje:

public class Student {

private String brojIndeksa;


private String ime;
private String prezime;
private int ocena;

public int getOcena() {


return ocena;
}
public void setOcena(int ocena) {
if (ocena >=5 && ocena<=10) this.ocena = ocena;
else System.out.println("Greska");
}
public String getBrojIndeksa() {
return brojIndeksa;
}
public void setBrojIndeksa(String brojIndeksa) {
if (brojIndeksa != null) this.brojIndeksa = brojIndeksa;
else System.out.println("Greska");
}
public String getIme() {
return ime;
}
public void setIme(String ime) {
if (ime != null) this.ime = ime;
else System.out.println("Greska");
}
public String getPrezime() {
return prezime;
}
public void setPrezime(String prezime) {
if (prezime != null) this.prezime = prezime;
else System.out.println("Greska");
}

public String toString(){


return "Br.ind.: "+brojIndeksa+" Ime: "+ime+" Prezime: "+
prezime+" Ocena: "+ocena;
}

public boolean equals(Object o){


Student s = (Student)(o);

if (brojIndeksa.equals(s.getBrojIndeksa()))
return true;
else
return false;
}

import java.util.LinkedList;

public class IspitnaLista {

private LinkedList <Student> studenti;

public IspitnaLista(){
studenti = new LinkedList <Student> ();
}

public boolean daLiJeUListi(Student s){


return studenti.contains(s);
}

public void dodajStudenta(Student s){


if (s!=null && !studenti.contains(s))
studenti.add(s);
else System.out.println("Greska");
}

public void dodajStudentaNaPocetak(Student s){


if (s!=null && !studenti.contains(s))
studenti.addFirst(s);
else System.out.println("Greska");
}

public void dodajStudentaNaKraj(Student s){


//Metode add i addLast su ekvivalentne jer obe dodaju
//element na kraj liste
if (s!=null && !studenti.contains(s))
studenti.addLast(s);
else System.out.println("Greska");
}

public void dodajStudentaNaMesto(Student s, int redBr){


//Metoda add(int,Student) unosi element na i-tu poziciju
/ u listu a svi ostali elementi liste se pomeraju za jedno
//mesto udesno. Indeksi elemenata liste pocinju od nule.
//Duzina liste se dobija pozivom metode size().
if (s!=null && !studenti.contains(s) && redBr>=0 &&
redBr<studenti.size())
studenti.add(redBr,s);
else System.out.println("Greska");
}

public void izbrisiStudenta(Student s){


if (s!=null && studenti.contains(s))
studenti.remove(s);
else System.out.println("Greska");
}

public void izbrisiStudentaSaPocetka(){


if (studenti.size()>0)
studenti.removeFirst();
else System.out.println("Greska");
}

public void izbrisiStudentaSaKraja(){


if (studenti.size()>0)
studenti.removeLast();
else System.out.println("Greska");
}

public void izbrisiStudentaSaMesta(int redBr){


if (studenti.size()>0 && redBr>=0 && redBr<studenti.size())
studenti.remove(redBr);
else System.out.println("Greska");
}

public void obrisiListu(){


studenti.clear();
}

public void ispisiPrvog(){


if (studenti.size()>0)
System.out.println(studenti.getFirst());
else
System.out.println("Lista studenata je prazna");
}

public void ispisiPoslednjeg(){


if (studenti.size()>0)
System.out.println(studenti.getLast());
else
System.out.println("Lista studenata je prazna");
}

public void ispisi(){


for (int i=0; i< studenti.size(); i++)
System.out.println(studenti.get(i));
}

public void ispisiDesetke(){


for (int i=0; i< studenti.size(); i++)
if (studenti.get(i).getOcena() == 10)
System.out.println(studenti.get(i));
}

public double prosek(){


double suma = 0;
for (int i=0; i< studenti.size(); i++)
suma = suma + studenti.get(i).getOcena();

return suma/studenti.size();
}

public void ispisiStareStudente(){


for (int i=0; i< studenti.size(); i++){
String brInd = studenti.get(i).getBrojIndeksa();
String god = brInd.substring(5);
if (god.equals("99"))
System.out.println(studenti.get(i));
}
}

public class TestIspitnaLista {

public static void main(String args[]){

IspitnaLista il = new IspitnaLista();

Student s1 = new Student();


s1.setBrojIndeksa("0001/99");
s1.setIme("Ivana");
s1.setPrezime("Stevanovic");
s1.setOcena(10);

Student s2 = new Student();


s2.setBrojIndeksa("0123/06");
s2.setIme("Petar");
s2.setPrezime("Petrovic");
s2.setOcena(6);

Student s3 = new Student();


s3.setBrojIndeksa("0021/05");
s3.setIme("Jovan");
s3.setPrezime("Jovanovic");
s3.setOcena(8);

il.dodajStudenta(s1);
il.dodajStudenta(s2);
il.dodajStudenta(s3);

System.out.println("Prosecna ocena je: "+il.prosek());

il.ispisiStareStudente();
}

Zadatak 2

Napraviti javnu klasu Motocikl koja ima:


Privatni atribut marka.
Privatni atribut model.
Privatni atribut kubikaza koji predstavlja broj kubika motocikla (ceo broj).
Odgovarajue get i set metode za ove atribute.
Redefinisanu toString metodu klase Object koja vraa String sa svim podacima o motociklu uz odgovarajuu
poruku.
Redefinisanu equals metodu klase Object koja kao ulazni argument prima objekat klase Object, ali se smatra
da e se zaista unositi objekti klase Motocikl. Ova metoda vraa true ako je vrednost atributa marka, model i
kubikaza jednaka marki, modelu i kubikazi motocikla koji je unet kao ulazni argument. U suprotnom, metoda
vraa false.

Napraviti javnu klasu BazaMotocikala koja ima:


Privatni atribut motocikli koji predstavlja listu objekata klase Motocikl.
Javni konstruktor koji inicijalizuje atribut motocikli.
Javnu metodu daLiJeUBazi koja kao ulazni argument prima objekat klase Motocikl i proverava da li se isti
motocikl ve nalazi u bazi.
Javnu metodu unesiUBazu koja kao ulazni argument prima objekat klase Motocikl i unosi ga u listu. Unoenje
se vri samo ako uneta vrednost nije null i ako u bazi ve ne postoji isti motocikl.
Javnu metodu izbaciIzBaze koja kao ulazni argument prima objekat klase Motocikl i brie ga iz baze. Brisanje
se vri samo ako u bazi postoji isti motocikl.
Javnu metodu ispisi koja na ekranu ispisuje podatke o svim motociklima.
Javnu metodu ispisiKawasaki koja ispisuje na ekranu podatke samo onih motocikala koji su marke
Kawasaki.
Javnu metodu maxKubikaza koja vraa najveu kubikau motocikla iz liste.
Javnu metodu prosecnaKubikaza koja izraunava i vraa prosenu kubikau motocikala iz baze.
Javnu metodu ispisiNajveci koja na ekranu ispisuje podatke o motociklu sa najveom kubikazom.

Napraviti klasu TestBazaMotocikala koja kreira objekat klase BazaMotockala i tri objekta klase Motocikl :Honda -
CB 750 F - 748, Kawasaki - ER 5 - 498 i Honda - CB 750 F - 748. Potrebno je prva dva objekta ubaciti u
bazu i ispisati sadraj baze. Nakon toga, potrebno je proveriti da li se trei motocikl ve nalazi u bazi i izbaciti ga iz
baze. Ponovo na ekranu ispisati sadraj baze i ispisati sve motocikle marke Kawasaki.

Reenje:

public class Motocikl {

private String marka;


private String model;
private int kubikaza;

public int getKubikaza() {


return kubikaza;
}
public void setKubikaza(int kubikaza) {
this.kubikaza = kubikaza;
}
public String getMarka() {
return marka;
}
public void setMarka(String marka) {
this.marka = marka;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}

public String toString(){


return "Marka: "+marka+" Model: "+model+" Kubikaza: "+kubikaza;
}

public boolean equals(Object o){


Motocikl m = (Motocikl)(o);

if (marka.equals(m.getMarka())&&
(model.equals(m.getModel()))&&
kubikaza == m.getKubikaza()) return true;
else return false;
}

import java.util.*;

public class BazaMotocikala {

private LinkedList <Motocikl> motocikli;

public BazaMotocikala(){
motocikli = new LinkedList <Motocikl> ();
}

public boolean daLiJeUBazi(Motocikl m){


return motocikli.contains(m);
}

public void unesiUBazu(Motocikl m){


//Umesto daLiJeUBazi(m) moze da stoji i direktno
//motocikli.contains(m).
if (daLiJeUBazi(m))
System.out.println("Taj motocikl se vec nalazi u bazi");
else motocikli.add(m);
}

public void izbaciIzBaze(Motocikl m){


if (!daLiJeUBazi(m))
System.out.println("Taj motocikl se ne nalazi u bazi");
else {
motocikli.remove(m);
}
}

public void ispisi(){


for (int i=0; i<motocikli.size();i++)
System.out.println(motocikli.get(i));
}

public void ispisiKawasaki(){


for (int i=0; i<motocikli.size();i++)
if (motocikli.get(i).getMarka().equals("Kawasaki"))
System.out.println(motocikli.get(i));
}

public int maxKubikaza(){


int maxK = 0;
for (int i=0; i<motocikli.size();i++)
if (motocikli.get(i).getKubikaza() > maxK)
maxK = motocikli.get(i).getKubikaza();
return maxK;
}

public int prosecnaKubikaza(){


int suma = 0;
for (int i=0; i<motocikli.size();i++)
suma += motocikli.get(i).getKubikaza();
return suma/motocikli.size();
}

public void ispisiNajveci(){


int maxK = maxKubikaza();

for (int i=0; i<motocikli.size();i++)


if (motocikli.get(i).getKubikaza() == maxK){
System.out.println(motocikli.get(i));
//Moze i bez break naredbe, ali je ovako metoda efikasnija jer
//kad nadje odgovarajuci motocikl, ispisuje ga i ne proverava dalje
// - break naredba prekida for petlju.
break;
}
}

public class TestBazaMotocikala {

public static void main(String[] args){

BazaMotocikala b = new BazaMotocikala();

Motocikl m1 = new Motocikl();

m1.setMarka("Honda");
m1.setModel("CB 750 F");
m1.setKubikaza(748);

Motocikl m2 = new Motocikl();

m2.setMarka("Kawasaki");
m2.setModel("ER 5");
m2.setKubikaza(498);

b.unesiUBazu(m1);
b.unesiUBazu(m2);

Motocikl m3 = new Motocikl();

m3.setMarka("Honda");
m3.setModel("CB 750 F");
m3.setKubikaza(748);

b.ispisi();

System.out.println("Da li postoji "+b.daLiJeUBazi(m3));

b.izbaciIzBaze(m3);

b.ispisi();

b.ispisiKawasaki();
}

Zadatak 3

Napraviti javnu klasu ReliEkipa koja ima:


Privatni atribut imeEkipe.
Privatni atribut brojPoena (ceo broj) koji predstavlja broj poena koji je ta reli ekipa osvojila u ampionatu.
Odgovarajue javne get i set metode za ova dva atributa. Ime ekipe ne moe da bude null, a broj poena mora
da bude nula ili vei od nule. Ako je bilo koje od ovih ogranienja prekoraeno, ispisati poruku o greci na
ekranu.
Redefinisanu toString metodu klase Object koja vraa String u kome se nalaze svi podaci o ekipi uz
odgovarajuu poruku.
Redefinisanu equals metodu klase Object koja kao ulazni argument prima objekat klase Object, ali se smatra
da e se zaista unositi objekti klase ReliEkipa. Prvo, potrebno je proveriti da li je zaista unet objekat klase
ReliEkipa, pa ako nije vratiti false. Ako je unet objekat klase ReliEkipa, ova metoda vraa true ako je vrednost
atributa imeEkipe jednaka imenu ekipe objekta koji je unet kao ulazni argument. U suprotnom, metoda vraa
false.

Napraviti javnu klasu ReliRangLista koja predstavlja listu rezultata reli ekipe. Ova klasa ima:
Privatni atribut ekipe koji predstavlja listu objekata klase ReliEkipa. Ovaj atribut je potrebno inicijalizovati
odmah.
Javnu metodu za unoenje reli ekipe u listu. Ova metoda kao ulazni argument prima objekat klase ReliEkipa i
unosi ga u listu samo ako u listi ve ne postoji ekipa sa istim imenom i ako ulazni argument nije null. U
suprotnom, ispisuje se poruka o greci. Unoenje se vri tako da se ne poremeti opadajui poredak: lista je
ureena tako da se na prvom mestu nalazi ekipa sa najvie poena, na drugom prva ekipa sa manje poena itd.
Znai, novu ekipu treba uneti tako da lista i posle unoenja ostane ureena. Ako ekipa ima najmanje poena od
svih ekipa, unosi se na kraj liste.
Javnu metodu koja na ekranu ispisuje celu reli rang listu. Potrebno je ispisati i poziciju svake ekipe pri emu
pozicije kreu od 1 a ne od nula.
Javnu metodu koja na ekranu ispisuje celu reli rang listu ali u obrnutom redosledu prvo se ispisuju najslabije
ekipe. Potrebno je ispisati i poziciju svake ekipe pri emu pozicije kreu od 1 a ne od nula.
Javnu metodu koja na ekranu ispisuje deset najboljih reli ekipa zajedno sa informacijom o njihovoj poziciji.
Broj pozicije kree od 1 a ne od nula.
Javnu metodu koja menja poziciju reli ekipe na listi. Metoda kao ulazni argument dobija objekat klase
ReliEkipa koji sadri novi broj poena za datu ekipu. Potrebno je iz liste obrisati objekat klase ReliEkipa koji
predstavlja istu ekipu, ali sa starim brojem poena, pa tek onda uneti objekat koji predstavlja novi broj poena.
Ovo se vri tako da lista ostane ureena i posle zamene. Zamena se vri samo ako je uneti objekat razliit od
null i ako se istoimena ekipa ve nalazi u listi.

Napraviti javnu klasu TestReliRangLista koja kreira jedan objkat klase ReliRangLista i u njega unosi sledee podatke
o ekipama: Audi 30 poena, BMW 40 poena, Renault 20 poena, VW 5 poena, Subaru 30 poena, Peugeot 33
poena, Ford 50 poena, Mitsubishi 4 poena, Lancia 23 poena, Skoda 15 poena i Seat 0 poena. Ispisati na
ekranu celu listu u obinom i obrnutom redosledu, a zatim prvih deset ekipa. Zameniti podatke o BMW ekipi tako da
novi broj poena bude 55. Ponovo ispisati celu listu na ekranu.

Reenje:

public class ReliEkipa {

private String imeEkipe;


private int brojPoena;

public int getBrojPoena() {


return brojPoena;
}
public void setBrojPoena(int brojPoena) {
if (brojPoena >= 0) this.brojPoena = brojPoena;
else System.out.println("Greska");
}
public String getImeEkipe() {
return imeEkipe;
}
public void setImeEkipe(String imeEkipe) {
if (imeEkipe != null) this.imeEkipe = imeEkipe;
else System.out.println("Greska");
}

public String toString(){


return "Ekipa: "+imeEkipe+" Poeni: "+brojPoena;
}

public boolean equals (Object o){


if (o instanceof ReliEkipa)
{
ReliEkipa r=(ReliEkipa)(o);
if (imeEkipe.equals(r.getImeEkipe()))
return true;
else
return false;
}
else
return false;
}

import java.util.LinkedList;

public class ReliRangLista {

private LinkedList <ReliEkipa> ekipe =


new LinkedList <ReliEkipa>();

public void unesiEkipu(ReliEkipa r){


if (r!=null && !ekipe.contains(r)){

for (int i=0; i<ekipe.size();i++)


if (ekipe.get(i).getBrojPoena()<r.getBrojPoena()){
//Ekipa se unosi na i-to mesto gde je prva ekipa koja
//ima manje poena od nje. Sve ostale ekipe se pomeraju
//za jedno mesto nize na listi.
ekipe.add(i, r);
break;
}
//Ako ekipa ima najmanje poena od svih sa liste, ona nece biti
//ubacena u okviru for petlje jer nije nadjena nijedna ekipa sa
//manje poena od nje. Zato se na kraju proverava da li je ekipa
//ubacena, pa ako nije, unosi se na kraj liste.
if (!ekipe.contains(r))
ekipe.addLast(r);

}
else System.out.println("Greska");
}

public void ispisi(){


for(int i=0;i<ekipe.size();i++)
System.out.println((i+1)+". "+ekipe.get(i));

public void ispisiObrnuto(){


for(int i=ekipe.size()-1;i>=0;i--)
System.out.println((i+1)+". "+ekipe.get(i));

public void ispisiDesetNajboljih(){


for(int i=0;i<10;i++)
System.out.println((i+1)+". "+ekipe.get(i));
}

public void zameni (ReliEkipa r){


if (r!=null && ekipe.contains(r)){
ekipe.remove(r);
unesiEkipu(r);
}
else System.out.println("Greska");
}

public class TestReliRangLista {

public static void main(String[] args) {

ReliRangLista r = new ReliRangLista();

ReliEkipa re1 = new ReliEkipa();


re1.setImeEkipe("Audi");
re1.setBrojPoena(30);

ReliEkipa re2 = new ReliEkipa();


re2.setImeEkipe("BMW");
re2.setBrojPoena(40);

ReliEkipa re3 = new ReliEkipa();


re3.setImeEkipe("Renault");
re3.setBrojPoena(20);

ReliEkipa re4 = new ReliEkipa();


re4.setImeEkipe("VW");
re4.setBrojPoena(5);

ReliEkipa re5 = new ReliEkipa();


re5.setImeEkipe("Subaru");
re5.setBrojPoena(30);

ReliEkipa re6 = new ReliEkipa();


re6.setImeEkipe("Peugeot");
re6.setBrojPoena(33);

ReliEkipa re7 = new ReliEkipa();


re7.setImeEkipe("Ford");
re7.setBrojPoena(50);

ReliEkipa re8 = new ReliEkipa();


re8.setImeEkipe("Mitsubishi");
re8.setBrojPoena(4);

ReliEkipa re9 = new ReliEkipa();


re9.setImeEkipe("Lancia");
re9.setBrojPoena(23);

ReliEkipa re10 = new ReliEkipa();


re10.setImeEkipe("Skoda");
re10.setBrojPoena(15);

ReliEkipa re11 = new ReliEkipa();


re11.setImeEkipe("Seat");
re11.setBrojPoena(0);

r.unesiEkipu(re1);
r.unesiEkipu(re2);
r.unesiEkipu(re3);
r.unesiEkipu(re4);
r.unesiEkipu(re5);
r.unesiEkipu(re6);
r.unesiEkipu(re7);
r.unesiEkipu(re8);
r.unesiEkipu(re9);
r.unesiEkipu(re10);
r.unesiEkipu(re11);

r.ispisi();
r.ispisiObrnuto();

System.out.println("TOP 10");
r.ispisiDesetNajboljih();

ReliEkipa re12 = new ReliEkipa();


re12.setImeEkipe("BMW");
re12.setBrojPoena(55);

r.zameni(re12);

r.ispisi();
}

Zadatak 4

Napraviti javnu klasu Takmicar koja ima:


Privatni atribut zemlja koji predstavlja dravu porekla takmiara.
Privatni atribut imePrezime.
Privatni atribut vreme koji predstavlja vreme koje je takmiar ostvario na takmienju izraeno u sekundama
(realan broj).
Odgovarajue javne get i set metode za ove atribute. Nedozvoljene vrednosti za zemlju i imePrezime su null
Stringovi. Vreme mora da bude nula ili vee od nule. Ako je uneto vreme nula, smatra se da je takmiar
diskvalifikovan. U sluaju unoenja nedozvoljenih vrednosti, potrebno je na ekranu ispisati poruku o greci.
Redefinisanu metodu toString klase Object koja vraa String sa svim podacima o takmiaru ako je vreme koje
je ostvario vee od nule. Ako je vreme jednako nuli to znai da je takmiar diskvalifikovan. U tom sluaju
String treba da sadri zemlju porekla ime, prezime, i re diskvalifikovan.
Redefinisanu equals metodu klase Object koja kao ulazni argument prima objekat klase Object, ali se smatra
da e se zaista unositi objekti klase Takmicar. Prvo, potrebno je proveriti da li je zaista unet objekat klase
Takmicar, pa ako nije vratiti false. Ako je unet objekat klase Takmicar, ova metoda vraa true ako je vrednost
atributa zemlja i imePrezime jednaka zemlji i imenu i prezimenu takmiara koji je unet kao ulazni argument. U
suprotnom, metoda vraa false.

Napraviti javnu klasu ListaRezultata koja ima:


Privatni atribut takmicari koji predstavlja listu takmiara.
Javni konstruktor koji inicijalizuje listu.
Javnu metodu unesiTakmicara koja kao ulazni argument dobija objekat klase Takmicar i unosi ga u listu. Lista
rezultata je ureena tako da se na poetku liste nalazi takmiar sa najmanjim vremenom pa za njim slede
takmiari sa veim vremenom organzovani u rastuem poretku. Na kraju liste se nalaze takmiari koji su
diskvalifikovani. Unoenje se vri samo ako ulazni argument nije null i ako ve ne postoji u listi. U suprotnom,
ispisuje se poruka o greci. Unoenje je potrebno izvriti tako da lista ostane ureena i posle unoenja.
Javnu metodu ispisi koja ispisuje na ekranu celu listu rezultata zajedno sa pozicijama takmiara (pozicije kreu
od 1).
Javnu metodu ispisiFinaliste koja ispisuje osam najboljih takmicara koji e da idu u finale. Ako se meu prvih
osam nae neki takmiar koji je diskvalifikovan, metoda ga ne ispisuje. Ako u listi nema osam takmiara,
ispisuje se koliko ih ima.
Javnu metodu ispisiReprezentativce koja kao ulazni argument prima ime zemlje i ispisuje rezultate svih njenih
reprezentativaca.
Javnu metodu daLiJeOborenRekord koja kao ulazni argument prima vreme koje predstavlja svetski rekord.
Metoda vraa TRUE ako je neki takmiar oborio rekord a FALSE ako rekord nije oboren. Pri poreenju treba
razmatrati samo one takmiare koji nisu diskvalifikovani.

Napraviti javnu klasu TestListaRezultata koja kreira jedan objekat klase ListaRezultata i u njega unosi podatke o
sledeim takmiarima: Grcka Costas Pappas 23,1 , SAD Colin Firth 20.12, Rusija Ivan Ivanovic 19.05,
Turska Mehmed Turk DISKVALIFIKOVAN, Velika Britanija John Pale 22.78 i SAD Jack Stone
DISKVALIFIKOVAN. Ispisati sve takmiare, finaliste a ona i reprezentativce SAD. Ispisati i poruku o tome da li je
oboren svetski rekord od 19.1.
Reenje:

public class Takmicar {

private String zemlja;


private String imePrezime;
private double vreme;

public String getImePrezime() {


return imePrezime;
}
public void setImePrezime(String imePrezime) {
if (imePrezime != null)
this.imePrezime = imePrezime;
else System.out.println("Greska");
}
public double getVreme() {
return vreme;
}
public void setVreme(double vreme) {
if (vreme >= 0) this.vreme = vreme;
else System.out.println("Greska");
}
public String getZemlja() {
return zemlja;
}
public void setZemlja(String zemlja) {
if (zemlja != null) this.zemlja = zemlja;
else System.out.println("Greska");
}

public String toString(){


if (vreme > 0)
return "Zemlja: "+zemlja+" Takmicar: "+imePrezime+
" Vreme: "+vreme;
else
return "Zemlja: "+zemlja+" Takmicar: "+imePrezime+
" DISKVALIFIKOVAN";
}

public boolean equals (Object o){


if (o instanceof Takmicar)
{
Takmicar t=(Takmicar)(o);
if (zemlja.equals(t.getZemlja())&&
imePrezime.equals(t.getImePrezime()))
return true;
else
return false;
}
else
return false;
}

import java.util.LinkedList;

public class ListaRezultata {

private LinkedList <Takmicar> takmicari;

public ListaRezultata(){
takmicari = new LinkedList <Takmicar> ();
}

public void unesiTakmicara (Takmicar t){


if (t!=null && !takmicari.contains(t)){

//Ako je takmicar diskvalifikovan, dodaje se


//na kraj liste.
if (t.getVreme()==0) takmicari.addLast(t);
else{
for (int i=0;i<takmicari.size();i++)
//Ako se nadje takmicar koji ima vece vreme od
//unetog takmicara ili ako se naidje na diskvalif.
//takmicara, vrsi se unosenje.
if (t.getVreme() < takmicari.get(i).getVreme() ||
takmicari.get(i).getVreme() == 0){
takmicari.add(i,t);
break;
}
if (!takmicari.contains(t))
takmicari.addFirst(t);
}

}
else System.out.println("Greska");
}

public void ispisi(){


for (int i=0; i<takmicari.size();i++)
System.out.println((i+1)+". "+takmicari.get(i));
}

public void ispisiFinaliste(){


//Promenljiva max se uvodi za slucaj da u listi nema 8 takmicara
int max = 8;
if (max > takmicari.size()) max = takmicari.size();

for (int i=0; i<max;i++)


if (takmicari.get(i).getVreme()!=0)
System.out.println(takmicari.get(i));
}

public void ispisiReprezentativce(String zemlja){


for (int i=0; i<takmicari.size();i++)
if (takmicari.get(i).getZemlja().equals(zemlja))
System.out.println((i+1)+". "+takmicari.get(i));
}

public boolean daLiJeOborenRekord(double vreme){


if (takmicari.getFirst().getVreme() > 0 &&
takmicari.getFirst().getVreme() < vreme)
return true;
else return false;
}

public class TestListaRezultata {

public static void main(String[] args) {

ListaRezultata l = new ListaRezultata();


Takmicar t1 = new Takmicar();
t1.setZemlja("Grcka");
t1.setImePrezime("Costas Pappas");
t1.setVreme(23.1);

Takmicar t2 = new Takmicar();


t2.setZemlja("SAD");
t2.setImePrezime("Colin Firth");
t2.setVreme(20.12);

Takmicar t3 = new Takmicar();


t3.setZemlja("Rusija");
t3.setImePrezime("Ivan Ivanovic");
t3.setVreme(19.05);

Takmicar t4 = new Takmicar();


t4.setZemlja("Turska");
t4.setImePrezime("Mehmed Turk");
t4.setVreme(0);

Takmicar t5 = new Takmicar();


t5.setZemlja("Velika Britanija");
t5.setImePrezime("John Pale");
t5.setVreme(22.78);

Takmicar t6 = new Takmicar();


t6.setZemlja("SAD");
t6.setImePrezime("Jack Stone");
t6.setVreme(0);

l.unesiTakmicara(t1);
l.unesiTakmicara(t2);
l.unesiTakmicara(t3);
l.unesiTakmicara(t4);
l.unesiTakmicara(t5);
l.unesiTakmicara(t6);

l.ispisi();
System.out.println("Finalisti");
l.ispisiFinaliste();

System.out.println("Reprezentativci SAD");
l.ispisiReprezentativce("SAD");

if (l.daLiJeOborenRekord(19.1))
System.out.println("Rekord je oboren");
else
System.out.println("Rekord nije oboren");
}