X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=blobdiff_plain;f=sortiranje%2Fraspored%2FRaspored.java;h=fb8e98750341370a80639ca0e65989b7a8b0260a;hp=715825ca9ee26eb00f1789128a385e853f31ef06;hb=d85081749679b32f3bdbccc90d45c6c89d49bbc5;hpb=299e9c29198ce76487d0ef651e74d84066d415ce diff --git a/sortiranje/raspored/Raspored.java b/sortiranje/raspored/Raspored.java index 715825c..fb8e987 100644 --- a/sortiranje/raspored/Raspored.java +++ b/sortiranje/raspored/Raspored.java @@ -7,68 +7,68 @@ import java.util.Comparator; import org.svetovid.io.SvetovidReader; /** - * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe, + * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe, * prestavljeno svojim danom pocetnim i krajnjim satom, salom, predmetom i godinom * studija studenta koji treba da slusaju to predavanje. */ class Stavka implements Comparable { - private String predmet, sala; - private int dan, pocetak, kraj, godina; - - public Stavka(int dan, int pocetak, int kraj, String sala, int godina, - String predmet) { - this.dan = dan; - this.pocetak = pocetak; - this.kraj = kraj; - this.sala = sala; - this.godina = godina; - this.predmet = predmet; - } - - @Override - public String toString() { - return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " (" - + getGodina() + " godina) " + predmet; - } - - @Override - public int compareTo(Stavka that) { - int rez = this.getDan() - that.getDan(); - - if (rez == 0) { - rez = this.getPocetak() - that.getPocetak(); - - if (rez == 0) { - rez = this.getSala().compareTo(that.getSala()); - } - } - return rez; - } - - public int getGodina() { - return godina; - } - - public int getDan() { - return dan; - } - - public int getPocetak() { - return pocetak; - } - - public String getSala() { - return sala; - } - - public int getKraj() { - return kraj; - } - - public String getPredmet() { - return predmet; - } + private String predmet, sala; + private int dan, pocetak, kraj, godina; + + public Stavka(int dan, int pocetak, int kraj, String sala, int godina, + String predmet) { + this.dan = dan; + this.pocetak = pocetak; + this.kraj = kraj; + this.sala = sala; + this.godina = godina; + this.predmet = predmet; + } + + @Override + public String toString() { + return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " (" + + getGodina() + " godina) " + predmet; + } + + @Override + public int compareTo(Stavka that) { + int rez = this.getDan() - that.getDan(); + + if (rez == 0) { + rez = this.getPocetak() - that.getPocetak(); + + if (rez == 0) { + rez = this.getSala().compareTo(that.getSala()); + } + } + return rez; + } + + public int getGodina() { + return godina; + } + + public int getDan() { + return dan; + } + + public int getPocetak() { + return pocetak; + } + + public String getSala() { + return sala; + } + + public int getKraj() { + return kraj; + } + + public String getPredmet() { + return predmet; + } } /** @@ -76,182 +76,182 @@ class Stavka implements Comparable { */ public class Raspored { - public static void main(String[] args) { - - // Ucitavanje automobila - String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:"); - Stavka[] niz = ucitajStavke(fajl); - - // Ako nismo uspesno ucitali niz, zvrsavamo program - if (niz == null) { - Svetovid.out - .println("Dati fajl nije mogao da se procita! Proverite da li postoji."); - return; - } - - // Stampanje ucitanog niza - Svetovid.out.println("Originalni niz"); - stampajNiz(niz); - - Svetovid.out.println(); - Svetovid.out.println("Odaberite po cemu treba sortirati niz:"); - Svetovid.out.println("1 po imenu predmeta"); - Svetovid.out.println("2 po godini studija, danu i satima"); - Svetovid.out.println("3 po salama, danu i satu"); - Svetovid.out.println("4 po duzini predavanja"); - Svetovid.out.println("5 po danima, satima, salama"); - - int opcija = Svetovid.in.readInt(); - - if (opcija <1 || opcija >5) { - // prekidamo rad - Svetovid.out.println("nije odabrana validna opcija"); - Svetovid.out.println("kraj programa"); - return; - } - - Comparator komp = null; - switch (opcija) { - case 1: - komp = new KomparatorPoPredmetima(); - break; - case 2: - komp = new KomparatorPoGodinama(); - break; - case 3: - komp = new KomparatorPoSalama(); - break; - case 4: - komp = new KomparatorPoDuziniPredavanja(); - break; - case 5: - // ako prosledimo null komparator bice sortirano - // po "prirodnom" uredjenju, tj sa compareTo - komp = null; - break; - } - - // Sortiranje niza po drugom kriterijumu - Svetovid.out.println(); - Svetovid.out.println("Niz sortiran komparatorom"); - sortirajNiz(niz, komp); - stampajNiz(niz); - - } - - public static Stavka[] ucitajStavke(String fajl) { - - // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista - if (!Svetovid.testIn(fajl)) { - return null; - } - - SvetovidReader in = Svetovid.in(fajl); - - // Koliko ima stavki u fajlu? - int br = in.readInt(); - - // Napravimo niz odgovarajuce velicine - Stavka[] rez = new Stavka[br]; - - // Ucitamo stavke - for (int i = 0; i < br; i++) { - //preskacemo prazan red - in.readLine(); - - // Ucitamo podatke - int dan = in.readInt(); - int pocetak = in.readInt(); - int kraj = in.readInt(); - String sala = in.readLine(); - int godina = in.readInt(); - String predmet = in.readLine(); - - Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet); - - rez[i] = red; - } - - // Zatvorimo fajl - Svetovid.closeIn(fajl); - - // Vratimo ucitani niz - return rez; - - } - - public static void stampajNiz(Stavka[] niz) { - for (Stavka a : niz) { - Svetovid.out.println(a); - } - } - - public static void sortirajNiz(Stavka[] niz) { - // Sortiramo niz pomocu ugradjenog metoda - // koristi se compareTo iz klase - Arrays.sort(niz); - } - - public static void sortirajNiz(Stavka[] niz, Comparator komparator) { - // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator - Arrays.sort(niz, komparator); - } - - static class KomparatorPoPredmetima implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getPredmet().compareTo(a2.getPredmet()); - return rezultat; - } - } - - static class KomparatorPoGodinama implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getGodina() - a2.getGodina(); - - if (rezultat == 0) { - rezultat = a1.getDan() - a2.getDan(); - - if (rezultat == 0) { - rezultat = a1.getPocetak() - a2.getPocetak(); - } - } - - // Vratimo izracunati rezultat poredjenja - return rezultat; - } - } - - static class KomparatorPoSalama implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getSala().compareTo(a2.getSala()); - - if (rezultat == 0) { - rezultat = a1.getDan() - a2.getDan(); - - if (rezultat == 0) { - rezultat = a1.getPocetak() - a2.getPocetak(); - } - } - - // Vratimo izracunati rezultat poredjenja - return rezultat; - } - } - - static class KomparatorPoDuziniPredavanja implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak(); - - // Vratimo izracunati rezultat poredjenja - return rezultat; - } - } + public static void main(String[] args) { + + // Ucitavanje automobila + String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:"); + Stavka[] niz = ucitajStavke(fajl); + + // Ako nismo uspesno ucitali niz, zvrsavamo program + if (niz == null) { + Svetovid.out + .println("Dati fajl nije mogao da se procita! Proverite da li postoji."); + return; + } + + // Stampanje ucitanog niza + Svetovid.out.println("Originalni niz"); + stampajNiz(niz); + + Svetovid.out.println(); + Svetovid.out.println("Odaberite po cemu treba sortirati niz:"); + Svetovid.out.println("1 po imenu predmeta"); + Svetovid.out.println("2 po godini studija, danu i satima"); + Svetovid.out.println("3 po salama, danu i satu"); + Svetovid.out.println("4 po duzini predavanja"); + Svetovid.out.println("5 po danima, satima, salama"); + + int opcija = Svetovid.in.readInt(); + + if (opcija <1 || opcija >5) { + // prekidamo rad + Svetovid.out.println("nije odabrana validna opcija"); + Svetovid.out.println("kraj programa"); + return; + } + + Comparator komp = null; + switch (opcija) { + case 1: + komp = new KomparatorPoPredmetima(); + break; + case 2: + komp = new KomparatorPoGodinama(); + break; + case 3: + komp = new KomparatorPoSalama(); + break; + case 4: + komp = new KomparatorPoDuziniPredavanja(); + break; + case 5: + // ako prosledimo null komparator bice sortirano + // po "prirodnom" uredjenju, tj sa compareTo + komp = null; + break; + } + + // Sortiranje niza po drugom kriterijumu + Svetovid.out.println(); + Svetovid.out.println("Niz sortiran komparatorom"); + sortirajNiz(niz, komp); + stampajNiz(niz); + + } + + public static Stavka[] ucitajStavke(String fajl) { + + // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista + if (!Svetovid.testIn(fajl)) { + return null; + } + + SvetovidReader in = Svetovid.in(fajl); + + // Koliko ima stavki u fajlu? + int br = in.readInt(); + + // Napravimo niz odgovarajuce velicine + Stavka[] rez = new Stavka[br]; + + // Ucitamo stavke + for (int i = 0; i < br; i++) { + //preskacemo prazan red + in.readLine(); + + // Ucitamo podatke + int dan = in.readInt(); + int pocetak = in.readInt(); + int kraj = in.readInt(); + String sala = in.readLine(); + int godina = in.readInt(); + String predmet = in.readLine(); + + Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet); + + rez[i] = red; + } + + // Zatvorimo fajl + Svetovid.closeIn(fajl); + + // Vratimo ucitani niz + return rez; + + } + + public static void stampajNiz(Stavka[] niz) { + for (Stavka a : niz) { + Svetovid.out.println(a); + } + } + + public static void sortirajNiz(Stavka[] niz) { + // Sortiramo niz pomocu ugradjenog metoda + // koristi se compareTo iz klase + Arrays.sort(niz); + } + + public static void sortirajNiz(Stavka[] niz, Comparator komparator) { + // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator + Arrays.sort(niz, komparator); + } + + static class KomparatorPoPredmetima implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getPredmet().compareTo(a2.getPredmet()); + return rezultat; + } + } + + static class KomparatorPoGodinama implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getGodina() - a2.getGodina(); + + if (rezultat == 0) { + rezultat = a1.getDan() - a2.getDan(); + + if (rezultat == 0) { + rezultat = a1.getPocetak() - a2.getPocetak(); + } + } + + // Vratimo izracunati rezultat poredjenja + return rezultat; + } + } + + static class KomparatorPoSalama implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getSala().compareTo(a2.getSala()); + + if (rezultat == 0) { + rezultat = a1.getDan() - a2.getDan(); + + if (rezultat == 0) { + rezultat = a1.getPocetak() - a2.getPocetak(); + } + } + + // Vratimo izracunati rezultat poredjenja + return rezultat; + } + } + + static class KomparatorPoDuziniPredavanja implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak(); + + // Vratimo izracunati rezultat poredjenja + return rezultat; + } + } }