gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 299e9c2)
raw | patch | inline | side by side (parent: 299e9c2)
author | Ivan Pribela <ivanpribela@gmail.com> | |
Sun, 1 Nov 2015 14:55:47 +0000 (15:55 +0100) | ||
committer | Ivan Pribela <ivanpribela@gmail.com> | |
Sun, 1 Nov 2015 14:55:47 +0000 (15:55 +0100) |
index 5a680142aeb7c0b0441f43f351dc0d7fbe9161d3..ff33aeb1ca89614ac5e01f07d7031de2ba090c71 100644 (file)
// Klasa koja opisuje jednu knjigu\r
class Knjiga implements Comparable<Knjiga> {\r
\r
- public final int id;\r
- public final String naslov;\r
- public final String autor;\r
-\r
- public Knjiga(int id, String naslov, String autor) {\r
- this.id = id;\r
- this.naslov = naslov;\r
- this.autor = autor;\r
- }\r
-\r
- public String toString() {\r
- return id + " " + autor + ": " + naslov;\r
- }\r
-\r
- public int compareTo(Knjiga that) {\r
- return this.id - that.id;\r
- }\r
+ public final int id;\r
+ public final String naslov;\r
+ public final String autor;\r
+\r
+ public Knjiga(int id, String naslov, String autor) {\r
+ this.id = id;\r
+ this.naslov = naslov;\r
+ this.autor = autor;\r
+ }\r
+\r
+ public String toString() {\r
+ return id + " " + autor + ": " + naslov;\r
+ }\r
+\r
+ public int compareTo(Knjiga that) {\r
+ return this.id - that.id;\r
+ }\r
}\r
\r
// Glavni program\r
public class Biblioteka2 {\r
\r
- public static void main(String[] arguments) {\r
-\r
- // Ucitavamo knjige iz fajla\r
- String imeFajla = Svetovid.in\r
- .readLine("Unesite ime fajla sa knjigama:");\r
- Knjiga[] niz = ucitajKnjige(imeFajla);\r
-\r
- // Ako nismo ucitali knjige, zavrsavamo program sa return\r
- if (niz == null) {\r
- Svetovid.out.println("Ne moze da se cita iz fajla " + imeFajla\r
- + ".");\r
- return;\r
- }\r
+ public static void main(String[] arguments) {\r
\r
- // Pitamo korisnika za kriterijum sortiranja\r
- Svetovid.out.println("Opcija 1: standardan sort bez komparatora");\r
- Svetovid.out.println("Opcija 2: sort sa opadajucim id knjige");\r
- Svetovid.out.println("Opcija 3: sort po naslovu");\r
- Svetovid.out.println("Opcija 4: sort po autoru, a zatim po naslovu");\r
- Svetovid.out.println("Za ostale opcije niz nece biti sortiran");\r
- Svetovid.out.print("Unesite opciju 1-4:");\r
- int opcija = Svetovid.in.readInt();\r
-\r
- // Sortiramo po odabranom kriterijumu\r
- switch (opcija) {\r
- case 1:\r
- Arrays.sort(niz);\r
- break;\r
- case 2:\r
- sortirajNiz(niz, new ObrnutiKomparator(new PrirodniKomparator()));\r
- break;\r
- case 3:\r
- sortirajNiz(niz, new KomparatorPoNaslovu());\r
- break;\r
- case 4:\r
- sortirajNiz(niz, new KomparatorPoAutoruIPotomNaslovu());\r
- break;\r
- default:\r
- Svetovid.out.println("Pogresna opcija! Niz nece biti sortiran.");\r
- }\r
+ // Ucitavamo knjige iz fajla\r
+ String imeFajla = Svetovid.in.readLine("Unesite ime fajla sa knjigama:");\r
+ Knjiga[] niz = ucitajKnjige(imeFajla);\r
\r
- // Stampamo niz\r
- stampajKnjige("Niz knjiga", niz);\r
-\r
- // Sacuvamo (sortirani) niz u novi fajl\r
- imeFajla = Svetovid.in.readLine("Unesite ime fajla za snimanje: ");\r
- boolean sacuvano = sacuvajKnjige(imeFajla, niz);\r
-\r
- // Ako nismo sacuvali knjige, prijavimo to korisniku\r
- if (!sacuvano) {\r
- Svetovid.out.println("Ne moze da se pise u fajl " + imeFajla + ".");\r
- }\r
-\r
- }\r
-\r
- public static Knjiga[] ucitajKnjige(String imeFajla) {\r
-\r
- // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige\r
- if (!Svetovid.testIn(imeFajla)) {\r
- return null;\r
- }\r
-\r
- // Ako mozemo, napravimo precicu 'in' da ne bi morali da\r
- // svaki put kuvamo 'Svetovid.in(imeFajla)'\r
- SvetovidReader in = Svetovid.in(imeFajla);\r
-\r
- // Koliko ima knjiga u fajlu?\r
- int br = in.readInt();\r
-\r
- // Napravimo niz odgovarajuce velicine\r
- Knjiga[] rez = new Knjiga[br];\r
-\r
- // Ucitamo knjige\r
- for (int i = 0; i < br; i++) {\r
-\r
- // Ucitamo podatke o knjizi\r
- int id = in.readInt();\r
- String naslov = in.readLine();\r
- String autor = in.readLine();\r
-\r
- // Napravimo knjigu\r
- Knjiga knjiga = new Knjiga(id, naslov, autor);\r
-\r
- // Dodamo knjigu u niz\r
- rez[i] = knjiga;\r
-\r
- }\r
-\r
- // Zatvorimo fajl\r
- in.close();\r
-\r
- // Vratimo ucitani niz\r
- return rez;\r
-\r
- }\r
-\r
- public static void stampajKnjige(String naslov, Knjiga[] niz) {\r
-\r
- // Odstampamo naslov\r
- Svetovid.out.println();\r
- Svetovid.out.println(naslov);\r
- Svetovid.out.println();\r
-\r
- // I potom sve knjige redom\r
- for (Knjiga knjiga : niz) {\r
- Svetovid.out.println(knjiga);\r
- }\r
-\r
- }\r
-\r
- public static boolean sacuvajKnjige(String imeFajla, Knjiga[] niz) {\r
-\r
- // Ako ne mozemo da otvorimo fajl, ne upisujemo knjige\r
- if (!Svetovid.testOut(imeFajla)) {\r
- return false;\r
- }\r
-\r
- // Ako mozemo, napravimo precicu 'out' da ne bi morali da\r
- // svaki put kuvamo 'Svetovid.out(imeFajla)'\r
- SvetovidWriter fajl = Svetovid.out(imeFajla);\r
+ // Ako nismo ucitali knjige, zavrsavamo program sa return\r
+ if (niz == null) {\r
+ Svetovid.out.println("Ne moze da se cita iz fajla " + imeFajla + ".");\r
+ return;\r
+ }\r
\r
- // Upisemo ukupan broj knjiga\r
- fajl.println(niz.length);\r
+ // Pitamo korisnika za kriterijum sortiranja\r
+ Svetovid.out.println("Opcija 1: standardan sort bez komparatora");\r
+ Svetovid.out.println("Opcija 2: sort sa opadajucim id knjige");\r
+ Svetovid.out.println("Opcija 3: sort po naslovu");\r
+ Svetovid.out.println("Opcija 4: sort po autoru, a zatim po naslovu");\r
+ Svetovid.out.println("Za ostale opcije niz nece biti sortiran");\r
+ Svetovid.out.print("Unesite opciju 1-4:");\r
+ int opcija = Svetovid.in.readInt();\r
\r
- // I potom podatke za svaku knjigu\r
- for (Knjiga k : niz) {\r
- fajl.println(k.id);\r
- fajl.println(k.naslov);\r
- fajl.println(k.autor);\r
- }\r
+ // Sortiramo po odabranom kriterijumu\r
+ switch (opcija) {\r
+ case 1:\r
+ Arrays.sort(niz);\r
+ break;\r
+ case 2:\r
+ sortirajNiz(niz, new ObrnutiKomparator(new PrirodniKomparator()));\r
+ break;\r
+ case 3:\r
+ sortirajNiz(niz, new KomparatorPoNaslovu());\r
+ break;\r
+ case 4:\r
+ sortirajNiz(niz, new KomparatorPoAutoruIPotomNaslovu());\r
+ break;\r
+ default:\r
+ Svetovid.out.println("Pogresna opcija! Niz nece biti sortiran.");\r
+ }\r
\r
- // Zatvorimo fajl\r
- Svetovid.closeOut(imeFajla);\r
+ // Stampamo niz\r
+ stampajKnjige("Niz knjiga", niz);\r
\r
- // Javimo da smo uspesno sacuvali knjige\r
- return true;\r
+ // Sacuvamo (sortirani) niz u novi fajl\r
+ imeFajla = Svetovid.in.readLine("Unesite ime fajla za snimanje: ");\r
+ boolean sacuvano = sacuvajKnjige(imeFajla, niz);\r
+\r
+ // Ako nismo sacuvali knjige, prijavimo to korisniku\r
+ if (!sacuvano) {\r
+ Svetovid.out.println("Ne moze da se pise u fajl " + imeFajla + ".");\r
+ }\r
+\r
+ }\r
+\r
+ public static Knjiga[] ucitajKnjige(String imeFajla) {\r
+\r
+ // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige\r
+ if (!Svetovid.testIn(imeFajla)) {\r
+ return null;\r
+ }\r
+\r
+ // Ako mozemo, napravimo precicu 'in' da ne bi morali da\r
+ // svaki put kuvamo 'Svetovid.in(imeFajla)'\r
+ SvetovidReader in = Svetovid.in(imeFajla);\r
+\r
+ // Koliko ima knjiga u fajlu?\r
+ int br = in.readInt();\r
+\r
+ // Napravimo niz odgovarajuce velicine\r
+ Knjiga[] rez = new Knjiga[br];\r
+\r
+ // Ucitamo knjige\r
+ for (int i = 0; i < br; i++) {\r
+\r
+ // Ucitamo podatke o knjizi\r
+ int id = in.readInt();\r
+ String naslov = in.readLine();\r
+ String autor = in.readLine();\r
+\r
+ // Napravimo knjigu\r
+ Knjiga knjiga = new Knjiga(id, naslov, autor);\r
+\r
+ // Dodamo knjigu u niz\r
+ rez[i] = knjiga;\r
+\r
+ }\r
+\r
+ // Zatvorimo fajl\r
+ in.close();\r
+\r
+ // Vratimo ucitani niz\r
+ return rez;\r
+\r
+ }\r
+\r
+ public static void stampajKnjige(String naslov, Knjiga[] niz) {\r
+\r
+ // Odstampamo naslov\r
+ Svetovid.out.println();\r
+ Svetovid.out.println(naslov);\r
+ Svetovid.out.println();\r
+\r
+ // I potom sve knjige redom\r
+ for (Knjiga knjiga : niz) {\r
+ Svetovid.out.println(knjiga);\r
+ }\r
+\r
+ }\r
+\r
+ public static boolean sacuvajKnjige(String imeFajla, Knjiga[] niz) {\r
+\r
+ // Ako ne mozemo da otvorimo fajl, ne upisujemo knjige\r
+ if (!Svetovid.testOut(imeFajla)) {\r
+ return false;\r
+ }\r
+\r
+ // Ako mozemo, napravimo precicu 'out' da ne bi morali da\r
+ // svaki put kucamo 'Svetovid.out(imeFajla)'\r
+ SvetovidWriter fajl = Svetovid.out(imeFajla);\r
\r
- }\r
+ // Upisemo ukupan broj knjiga\r
+ fajl.println(niz.length);\r
\r
- public static void sortirajNiz(Knjiga[] niz, Comparator<Knjiga> c) {\r
- Knjiga tmp;\r
- for (int i = niz.length - 1; i > 0; i--)\r
- for (int j = 0; j < i; j++)\r
- if (c.compare(niz[j], niz[i]) > 0) {\r
- tmp = niz[j];\r
- niz[j] = niz[i];\r
- niz[i] = tmp;\r
- }\r
- }\r
+ // I potom podatke za svaku knjigu\r
+ for (Knjiga k : niz) {\r
+ fajl.println(k.id);\r
+ fajl.println(k.naslov);\r
+ fajl.println(k.autor);\r
+ }\r
+\r
+ // Zatvorimo fajl\r
+ Svetovid.closeOut(imeFajla);\r
+\r
+ // Javimo da smo uspesno sacuvali knjige\r
+ return true;\r
+\r
+ }\r
+\r
+ public static void sortirajNiz(Knjiga[] niz, Comparator<Knjiga> c) {\r
+ Knjiga tmp;\r
+ for (int i = niz.length - 1; i > 0; i--)\r
+ for (int j = 0; j < i; j++)\r
+ if (c.compare(niz[j], niz[i]) > 0) {\r
+ tmp = niz[j];\r
+ niz[j] = niz[i];\r
+ niz[i] = tmp;\r
+ }\r
+ }\r
\r
}\r
\r
-// Komparator koji poredi knjige po naslovu\r
+// Koparator koji poredi knjige po naslovu\r
class KomparatorPoNaslovu implements Comparator<Knjiga> {\r
\r
- @Override\r
- public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
- int rezultat = knjiga1.naslov.compareTo(knjiga2.naslov);\r
- return rezultat;\r
- }\r
+ @Override\r
+ public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
+ int rezultat = knjiga1.naslov.compareTo(knjiga2.naslov);\r
+ return rezultat;\r
+ }\r
}\r
\r
-// Komparator koji poredi knjige po naslovu\r
+// Koparator koji poredi knjige po naslovu\r
class KomparatorPoAutoru implements Comparator<Knjiga> {\r
\r
- @Override\r
- public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
- int rezultat = knjiga1.autor.compareTo(knjiga2.autor);\r
- return rezultat;\r
- }\r
+ @Override\r
+ public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
+ int rezultat = knjiga1.autor.compareTo(knjiga2.autor);\r
+ return rezultat;\r
+ }\r
}\r
\r
-// Komparator koji koristi prirodni poredak, tj. samo poziva compareTo()\r
+// Koparator koji koristi prirodni poredak, tj. samo poziva compareTo()\r
class PrirodniKomparator implements Comparator<Knjiga> {\r
\r
- @Override\r
- public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
- return knjiga1.compareTo(knjiga2);\r
- }\r
+ @Override\r
+ public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
+ return knjiga1.compareTo(knjiga2);\r
+ }\r
}\r
\r
// Komparator koji daje obrnuti poredak u odnosu na originalni komparator\r
-// koji mu je prosledjen u konstruktoru\r
class ObrnutiKomparator implements Comparator<Knjiga> {\r
\r
- private final Comparator<Knjiga> originalni;\r
+ private final Comparator<Knjiga> originalni;\r
\r
- public ObrnutiKomparator(Comparator<Knjiga> originalni) {\r
- this.originalni = originalni;\r
- }\r
+ public ObrnutiKomparator(Comparator<Knjiga> originalni) {\r
+ this.originalni = originalni;\r
+ }\r
\r
- @Override\r
- public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
+ @Override\r
+ public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
\r
- return -originalni.compare(knjiga1, knjiga2);\r
- }\r
+ return -originalni.compare(knjiga1, knjiga2);\r
+ }\r
}\r
\r
-// Komparator koji prvo poredi pomocu primarnog komparatora a potom po\r
-// sekundarnom\r
+// Komparator koji prvo poredi pomocu primarnog komparatora a potom po sekundarnom\r
class KompozitniKomparator implements Comparator<Knjiga> {\r
\r
- private final Comparator<Knjiga> primarni;\r
- private final Comparator<Knjiga> sekundarni;\r
-\r
- public KompozitniKomparator(Comparator<Knjiga> primarni,\r
- Comparator<Knjiga> sekundarni) {\r
- this.primarni = primarni;\r
- this.sekundarni = sekundarni;\r
- }\r
-\r
- @Override\r
- public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
- int rezultat = primarni.compare(knjiga1, knjiga2);\r
- if (rezultat == 0) {\r
- rezultat = sekundarni.compare(knjiga1, knjiga2);\r
- }\r
- return rezultat;\r
- }\r
+ private final Comparator<Knjiga> primarni;\r
+ private final Comparator<Knjiga> sekundarni;\r
+\r
+ public KompozitniKomparator(Comparator<Knjiga> primarni,\r
+ Comparator<Knjiga> sekundarni) {\r
+ this.primarni = primarni;\r
+ this.sekundarni = sekundarni;\r
+ }\r
+\r
+ @Override\r
+ public int compare(Knjiga knjiga1, Knjiga knjiga2) {\r
+ int rezultat = primarni.compare(knjiga1, knjiga2);\r
+ if (rezultat == 0) {\r
+ rezultat = sekundarni.compare(knjiga1, knjiga2);\r
+ }\r
+ return rezultat;\r
+ }\r
}\r
\r
// Komparator koji poredi po autoru, a za iste autore, po naslovu\r
class KomparatorPoAutoruIPotomNaslovu extends KompozitniKomparator {\r
\r
- public KomparatorPoAutoruIPotomNaslovu() {\r
- super(new KomparatorPoAutoru(), new KomparatorPoNaslovu());\r
- }\r
+ public KomparatorPoAutoruIPotomNaslovu() {\r
+ super(new KomparatorPoAutoru(), new KomparatorPoNaslovu());\r
+ }\r
}\r
index dfdad73217d708c836e23ae5d46643153541c9ca..02a970842a118049004be312c053289ef2db4c7c 100644 (file)
kodu umesto `compareTo` na objektu. Na primer
//umesto
- if (o.compareTo(o2)>0)
+ if (o.compareTo(o2)>0)
//koristiti
if (comp.compare(o,o2)>0)
nesortiranom delu niza nadjemo najmanji element i postavimo
ga na pocetak nesortiranog dela.
-
+
Sortiranje razmenom (exchange)
------------------------------------------------------------
premestanja elemenata u nizu.
Sortiranje umetanjem daje najbolje rezultate ukoliko su
-elementi niza mali ili je poredjenje komplikovano, tj ako
+elementi niza mali ili je poredjenje komplikovano, tj ako
je premestanje brze od poredjenja.
index 715825ca9ee26eb00f1789128a385e853f31ef06..fb8e98750341370a80639ca0e65989b7a8b0260a 100644 (file)
import org.svetovid.io.SvetovidReader;\r
\r
/**\r
- * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe, \r
+ * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe,\r
* prestavljeno svojim danom pocetnim i krajnjim satom, salom, predmetom i godinom\r
* studija studenta koji treba da slusaju to predavanje.\r
*/\r
class Stavka implements Comparable<Stavka> {\r
\r
- private String predmet, sala;\r
- private int dan, pocetak, kraj, godina;\r
-\r
- public Stavka(int dan, int pocetak, int kraj, String sala, int godina,\r
- String predmet) {\r
- this.dan = dan;\r
- this.pocetak = pocetak;\r
- this.kraj = kraj;\r
- this.sala = sala;\r
- this.godina = godina;\r
- this.predmet = predmet;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " ("\r
- + getGodina() + " godina) " + predmet;\r
- }\r
-\r
- @Override\r
- public int compareTo(Stavka that) {\r
- int rez = this.getDan() - that.getDan();\r
- \r
- if (rez == 0) {\r
- rez = this.getPocetak() - that.getPocetak();\r
- \r
- if (rez == 0) {\r
- rez = this.getSala().compareTo(that.getSala());\r
- }\r
- } \r
- return rez;\r
- }\r
-\r
- public int getGodina() {\r
- return godina;\r
- }\r
-\r
- public int getDan() {\r
- return dan;\r
- }\r
-\r
- public int getPocetak() {\r
- return pocetak;\r
- }\r
-\r
- public String getSala() {\r
- return sala;\r
- }\r
-\r
- public int getKraj() {\r
- return kraj;\r
- }\r
-\r
- public String getPredmet() {\r
- return predmet;\r
- }\r
+ private String predmet, sala;\r
+ private int dan, pocetak, kraj, godina;\r
+\r
+ public Stavka(int dan, int pocetak, int kraj, String sala, int godina,\r
+ String predmet) {\r
+ this.dan = dan;\r
+ this.pocetak = pocetak;\r
+ this.kraj = kraj;\r
+ this.sala = sala;\r
+ this.godina = godina;\r
+ this.predmet = predmet;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " ("\r
+ + getGodina() + " godina) " + predmet;\r
+ }\r
+\r
+ @Override\r
+ public int compareTo(Stavka that) {\r
+ int rez = this.getDan() - that.getDan();\r
+\r
+ if (rez == 0) {\r
+ rez = this.getPocetak() - that.getPocetak();\r
+\r
+ if (rez == 0) {\r
+ rez = this.getSala().compareTo(that.getSala());\r
+ }\r
+ }\r
+ return rez;\r
+ }\r
+\r
+ public int getGodina() {\r
+ return godina;\r
+ }\r
+\r
+ public int getDan() {\r
+ return dan;\r
+ }\r
+\r
+ public int getPocetak() {\r
+ return pocetak;\r
+ }\r
+\r
+ public String getSala() {\r
+ return sala;\r
+ }\r
+\r
+ public int getKraj() {\r
+ return kraj;\r
+ }\r
+\r
+ public String getPredmet() {\r
+ return predmet;\r
+ }\r
}\r
\r
/**\r
*/\r
public class Raspored {\r
\r
- public static void main(String[] args) {\r
-\r
- // Ucitavanje automobila\r
- String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:");\r
- Stavka[] niz = ucitajStavke(fajl);\r
-\r
- // Ako nismo uspesno ucitali niz, zvrsavamo program\r
- if (niz == null) {\r
- Svetovid.out\r
- .println("Dati fajl nije mogao da se procita! Proverite da li postoji.");\r
- return;\r
- }\r
-\r
- // Stampanje ucitanog niza\r
- Svetovid.out.println("Originalni niz");\r
- stampajNiz(niz);\r
-\r
- Svetovid.out.println();\r
- Svetovid.out.println("Odaberite po cemu treba sortirati niz:");\r
- Svetovid.out.println("1 po imenu predmeta");\r
- Svetovid.out.println("2 po godini studija, danu i satima");\r
- Svetovid.out.println("3 po salama, danu i satu");\r
- Svetovid.out.println("4 po duzini predavanja");\r
- Svetovid.out.println("5 po danima, satima, salama");\r
- \r
- int opcija = Svetovid.in.readInt();\r
- \r
- if (opcija <1 || opcija >5) {\r
- // prekidamo rad\r
- Svetovid.out.println("nije odabrana validna opcija");\r
- Svetovid.out.println("kraj programa");\r
- return;\r
- }\r
- \r
- Comparator<Stavka> komp = null;\r
- switch (opcija) {\r
- case 1:\r
- komp = new KomparatorPoPredmetima();\r
- break;\r
- case 2:\r
- komp = new KomparatorPoGodinama();\r
- break;\r
- case 3:\r
- komp = new KomparatorPoSalama();\r
- break;\r
- case 4:\r
- komp = new KomparatorPoDuziniPredavanja();\r
- break;\r
- case 5:\r
- // ako prosledimo null komparator bice sortirano\r
- // po "prirodnom" uredjenju, tj sa compareTo\r
- komp = null;\r
- break;\r
- }\r
- \r
- // Sortiranje niza po drugom kriterijumu\r
- Svetovid.out.println();\r
- Svetovid.out.println("Niz sortiran komparatorom");\r
- sortirajNiz(niz, komp);\r
- stampajNiz(niz);\r
-\r
- }\r
-\r
- public static Stavka[] ucitajStavke(String fajl) {\r
-\r
- // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista\r
- if (!Svetovid.testIn(fajl)) {\r
- return null;\r
- }\r
-\r
- SvetovidReader in = Svetovid.in(fajl);\r
-\r
- // Koliko ima stavki u fajlu?\r
- int br = in.readInt();\r
-\r
- // Napravimo niz odgovarajuce velicine\r
- Stavka[] rez = new Stavka[br];\r
-\r
- // Ucitamo stavke\r
- for (int i = 0; i < br; i++) {\r
- //preskacemo prazan red\r
- in.readLine();\r
- \r
- // Ucitamo podatke\r
- int dan = in.readInt();\r
- int pocetak = in.readInt();\r
- int kraj = in.readInt();\r
- String sala = in.readLine();\r
- int godina = in.readInt();\r
- String predmet = in.readLine();\r
-\r
- Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet);\r
-\r
- rez[i] = red;\r
- }\r
-\r
- // Zatvorimo fajl\r
- Svetovid.closeIn(fajl);\r
-\r
- // Vratimo ucitani niz\r
- return rez;\r
-\r
- }\r
-\r
- public static void stampajNiz(Stavka[] niz) {\r
- for (Stavka a : niz) {\r
- Svetovid.out.println(a);\r
- }\r
- }\r
-\r
- public static void sortirajNiz(Stavka[] niz) {\r
- // Sortiramo niz pomocu ugradjenog metoda\r
- // koristi se compareTo iz klase\r
- Arrays.sort(niz);\r
- }\r
-\r
- public static void sortirajNiz(Stavka[] niz, Comparator<Stavka> komparator) {\r
- // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator\r
- Arrays.sort(niz, komparator);\r
- }\r
-\r
- static class KomparatorPoPredmetima implements Comparator<Stavka> {\r
-\r
- @Override\r
- public int compare(Stavka a1, Stavka a2) {\r
- int rezultat = a1.getPredmet().compareTo(a2.getPredmet());\r
- return rezultat;\r
- }\r
- }\r
- \r
- static class KomparatorPoGodinama implements Comparator<Stavka> {\r
-\r
- @Override\r
- public int compare(Stavka a1, Stavka a2) {\r
- int rezultat = a1.getGodina() - a2.getGodina();\r
-\r
- if (rezultat == 0) {\r
- rezultat = a1.getDan() - a2.getDan();\r
- \r
- if (rezultat == 0) {\r
- rezultat = a1.getPocetak() - a2.getPocetak();\r
- }\r
- }\r
-\r
- // Vratimo izracunati rezultat poredjenja\r
- return rezultat;\r
- }\r
- }\r
-\r
- static class KomparatorPoSalama implements Comparator<Stavka> {\r
-\r
- @Override\r
- public int compare(Stavka a1, Stavka a2) {\r
- int rezultat = a1.getSala().compareTo(a2.getSala());\r
-\r
- if (rezultat == 0) {\r
- rezultat = a1.getDan() - a2.getDan();\r
- \r
- if (rezultat == 0) {\r
- rezultat = a1.getPocetak() - a2.getPocetak();\r
- }\r
- }\r
-\r
- // Vratimo izracunati rezultat poredjenja\r
- return rezultat;\r
- }\r
- }\r
- \r
- static class KomparatorPoDuziniPredavanja implements Comparator<Stavka> {\r
-\r
- @Override\r
- public int compare(Stavka a1, Stavka a2) {\r
- int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak();\r
-\r
- // Vratimo izracunati rezultat poredjenja\r
- return rezultat;\r
- }\r
- }\r
+ public static void main(String[] args) {\r
+\r
+ // Ucitavanje automobila\r
+ String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:");\r
+ Stavka[] niz = ucitajStavke(fajl);\r
+\r
+ // Ako nismo uspesno ucitali niz, zvrsavamo program\r
+ if (niz == null) {\r
+ Svetovid.out\r
+ .println("Dati fajl nije mogao da se procita! Proverite da li postoji.");\r
+ return;\r
+ }\r
+\r
+ // Stampanje ucitanog niza\r
+ Svetovid.out.println("Originalni niz");\r
+ stampajNiz(niz);\r
+\r
+ Svetovid.out.println();\r
+ Svetovid.out.println("Odaberite po cemu treba sortirati niz:");\r
+ Svetovid.out.println("1 po imenu predmeta");\r
+ Svetovid.out.println("2 po godini studija, danu i satima");\r
+ Svetovid.out.println("3 po salama, danu i satu");\r
+ Svetovid.out.println("4 po duzini predavanja");\r
+ Svetovid.out.println("5 po danima, satima, salama");\r
+\r
+ int opcija = Svetovid.in.readInt();\r
+\r
+ if (opcija <1 || opcija >5) {\r
+ // prekidamo rad\r
+ Svetovid.out.println("nije odabrana validna opcija");\r
+ Svetovid.out.println("kraj programa");\r
+ return;\r
+ }\r
+\r
+ Comparator<Stavka> komp = null;\r
+ switch (opcija) {\r
+ case 1:\r
+ komp = new KomparatorPoPredmetima();\r
+ break;\r
+ case 2:\r
+ komp = new KomparatorPoGodinama();\r
+ break;\r
+ case 3:\r
+ komp = new KomparatorPoSalama();\r
+ break;\r
+ case 4:\r
+ komp = new KomparatorPoDuziniPredavanja();\r
+ break;\r
+ case 5:\r
+ // ako prosledimo null komparator bice sortirano\r
+ // po "prirodnom" uredjenju, tj sa compareTo\r
+ komp = null;\r
+ break;\r
+ }\r
+\r
+ // Sortiranje niza po drugom kriterijumu\r
+ Svetovid.out.println();\r
+ Svetovid.out.println("Niz sortiran komparatorom");\r
+ sortirajNiz(niz, komp);\r
+ stampajNiz(niz);\r
+\r
+ }\r
+\r
+ public static Stavka[] ucitajStavke(String fajl) {\r
+\r
+ // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista\r
+ if (!Svetovid.testIn(fajl)) {\r
+ return null;\r
+ }\r
+\r
+ SvetovidReader in = Svetovid.in(fajl);\r
+\r
+ // Koliko ima stavki u fajlu?\r
+ int br = in.readInt();\r
+\r
+ // Napravimo niz odgovarajuce velicine\r
+ Stavka[] rez = new Stavka[br];\r
+\r
+ // Ucitamo stavke\r
+ for (int i = 0; i < br; i++) {\r
+ //preskacemo prazan red\r
+ in.readLine();\r
+\r
+ // Ucitamo podatke\r
+ int dan = in.readInt();\r
+ int pocetak = in.readInt();\r
+ int kraj = in.readInt();\r
+ String sala = in.readLine();\r
+ int godina = in.readInt();\r
+ String predmet = in.readLine();\r
+\r
+ Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet);\r
+\r
+ rez[i] = red;\r
+ }\r
+\r
+ // Zatvorimo fajl\r
+ Svetovid.closeIn(fajl);\r
+\r
+ // Vratimo ucitani niz\r
+ return rez;\r
+\r
+ }\r
+\r
+ public static void stampajNiz(Stavka[] niz) {\r
+ for (Stavka a : niz) {\r
+ Svetovid.out.println(a);\r
+ }\r
+ }\r
+\r
+ public static void sortirajNiz(Stavka[] niz) {\r
+ // Sortiramo niz pomocu ugradjenog metoda\r
+ // koristi se compareTo iz klase\r
+ Arrays.sort(niz);\r
+ }\r
+\r
+ public static void sortirajNiz(Stavka[] niz, Comparator<Stavka> komparator) {\r
+ // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator\r
+ Arrays.sort(niz, komparator);\r
+ }\r
+\r
+ static class KomparatorPoPredmetima implements Comparator<Stavka> {\r
+\r
+ @Override\r
+ public int compare(Stavka a1, Stavka a2) {\r
+ int rezultat = a1.getPredmet().compareTo(a2.getPredmet());\r
+ return rezultat;\r
+ }\r
+ }\r
+\r
+ static class KomparatorPoGodinama implements Comparator<Stavka> {\r
+\r
+ @Override\r
+ public int compare(Stavka a1, Stavka a2) {\r
+ int rezultat = a1.getGodina() - a2.getGodina();\r
+\r
+ if (rezultat == 0) {\r
+ rezultat = a1.getDan() - a2.getDan();\r
+\r
+ if (rezultat == 0) {\r
+ rezultat = a1.getPocetak() - a2.getPocetak();\r
+ }\r
+ }\r
+\r
+ // Vratimo izracunati rezultat poredjenja\r
+ return rezultat;\r
+ }\r
+ }\r
+\r
+ static class KomparatorPoSalama implements Comparator<Stavka> {\r
+\r
+ @Override\r
+ public int compare(Stavka a1, Stavka a2) {\r
+ int rezultat = a1.getSala().compareTo(a2.getSala());\r
+\r
+ if (rezultat == 0) {\r
+ rezultat = a1.getDan() - a2.getDan();\r
+\r
+ if (rezultat == 0) {\r
+ rezultat = a1.getPocetak() - a2.getPocetak();\r
+ }\r
+ }\r
+\r
+ // Vratimo izracunati rezultat poredjenja\r
+ return rezultat;\r
+ }\r
+ }\r
+\r
+ static class KomparatorPoDuziniPredavanja implements Comparator<Stavka> {\r
+\r
+ @Override\r
+ public int compare(Stavka a1, Stavka a2) {\r
+ int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak();\r
+\r
+ // Vratimo izracunati rezultat poredjenja\r
+ return rezultat;\r
+ }\r
+ }\r
}\r
index 38062547bc9e2a38c9f04de1eca6290812b0d599..8b5b91949252db74b19752eb3d12a7d8bb437995 100644 (file)
4
Konstrukcija kompajlera
-1
+1
19
21
s65