gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Sortiranje, raspored, resenje
[spa2-materijali.git] / sortiranje / raspored / Raspored.java
1 /**
2 * Resenje zadatka zadatak-sort-raspored.txt
3 */
4 import java.util.Arrays;
5 import java.util.Comparator;
7 import org.svetovid.io.SvetovidReader;
9 /**
10 * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe,
11 * prestavljeno svojim danom pocetnim i krajnjim satom, salom, predmetom i godinom
12 * studija studenta koji treba da slusaju to predavanje.
13 */
14 class Stavka implements Comparable<Stavka> {
16 private String predmet, sala;
17 private int dan, pocetak, kraj, godina;
19 public Stavka(int dan, int pocetak, int kraj, String sala, int godina,
20 String predmet) {
21 this.dan = dan;
22 this.pocetak = pocetak;
23 this.kraj = kraj;
24 this.sala = sala;
25 this.godina = godina;
26 this.predmet = predmet;
27 }
29 @Override
30 public String toString() {
31 return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " ("
32 + getGodina() + " godina) " + predmet;
33 }
35 @Override
36 public int compareTo(Stavka that) {
37 int rez = this.getDan() - that.getDan();
39 if (rez == 0) {
40 rez = this.getPocetak() - that.getPocetak();
42 if (rez == 0) {
43 rez = this.getSala().compareTo(that.getSala());
44 }
45 }
46 return rez;
47 }
49 public int getGodina() {
50 return godina;
51 }
53 public int getDan() {
54 return dan;
55 }
57 public int getPocetak() {
58 return pocetak;
59 }
61 public String getSala() {
62 return sala;
63 }
65 public int getKraj() {
66 return kraj;
67 }
69 public String getPredmet() {
70 return predmet;
71 }
72 }
74 /**
75 * Glavni program koji ucitava i sortira raspored
76 */
77 public class Raspored {
79 public static void main(String[] args) {
81 // Ucitavanje automobila
82 String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:");
83 Stavka[] niz = ucitajStavke(fajl);
85 // Ako nismo uspesno ucitali niz, zvrsavamo program
86 if (niz == null) {
87 Svetovid.out
88 .println("Dati fajl nije mogao da se procita! Proverite da li postoji.");
89 return;
90 }
92 // Stampanje ucitanog niza
93 Svetovid.out.println("Originalni niz");
94 stampajNiz(niz);
96 Svetovid.out.println();
97 Svetovid.out.println("Odaberite po cemu treba sortirati niz:");
98 Svetovid.out.println("1 po imenu predmeta");
99 Svetovid.out.println("2 po godini studija, danu i satima");
100 Svetovid.out.println("3 po salama, danu i satu");
101 Svetovid.out.println("4 po duzini predavanja");
102 Svetovid.out.println("5 po danima, satima, salama");
104 int opcija = Svetovid.in.readInt();
106 if (opcija <1 || opcija >5) {
107 // prekidamo rad
108 Svetovid.out.println("nije odabrana validna opcija");
109 Svetovid.out.println("kraj programa");
110 return;
113 Comparator<Stavka> komp = null;
114 switch (opcija) {
115 case 1:
116 komp = new KomparatorPoPredmetima();
117 break;
118 case 2:
119 komp = new KomparatorPoGodinama();
120 break;
121 case 3:
122 komp = new KomparatorPoSalama();
123 break;
124 case 4:
125 komp = new KomparatorPoDuziniPredavanja();
126 break;
127 case 5:
128 // ako prosledimo null komparator bice sortirano
129 // po "prirodnom" uredjenju, tj sa compareTo
130 komp = null;
131 break;
134 // Sortiranje niza po drugom kriterijumu
135 Svetovid.out.println();
136 Svetovid.out.println("Niz sortiran komparatorom");
137 sortirajNiz(niz, komp);
138 stampajNiz(niz);
142 public static Stavka[] ucitajStavke(String fajl) {
144 // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista
145 if (!Svetovid.testIn(fajl)) {
146 return null;
149 SvetovidReader in = Svetovid.in(fajl);
151 // Koliko ima stavki u fajlu?
152 int br = in.readInt();
154 // Napravimo niz odgovarajuce velicine
155 Stavka[] rez = new Stavka[br];
157 // Ucitamo stavke
158 for (int i = 0; i < br; i++) {
159 //preskacemo prazan red
160 in.readLine();
162 // Ucitamo podatke
163 int dan = in.readInt();
164 int pocetak = in.readInt();
165 int kraj = in.readInt();
166 String sala = in.readLine();
167 int godina = in.readInt();
168 String predmet = in.readLine();
170 Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet);
172 rez[i] = red;
175 // Zatvorimo fajl
176 Svetovid.closeIn(fajl);
178 // Vratimo ucitani niz
179 return rez;
183 public static void stampajNiz(Stavka[] niz) {
184 for (Stavka a : niz) {
185 Svetovid.out.println(a);
189 public static void sortirajNiz(Stavka[] niz) {
190 // Sortiramo niz pomocu ugradjenog metoda
191 // koristi se compareTo iz klase
192 Arrays.sort(niz);
195 public static void sortirajNiz(Stavka[] niz, Comparator<Stavka> komparator) {
196 // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator
197 Arrays.sort(niz, komparator);
200 static class KomparatorPoPredmetima implements Comparator<Stavka> {
202 @Override
203 public int compare(Stavka a1, Stavka a2) {
204 int rezultat = a1.getPredmet().compareTo(a2.getPredmet());
205 return rezultat;
209 static class KomparatorPoGodinama implements Comparator<Stavka> {
211 @Override
212 public int compare(Stavka a1, Stavka a2) {
213 int rezultat = a1.getGodina() - a2.getGodina();
215 if (rezultat == 0) {
216 rezultat = a1.getDan() - a2.getDan();
218 if (rezultat == 0) {
219 rezultat = a1.getPocetak() - a2.getPocetak();
223 // Vratimo izracunati rezultat poredjenja
224 return rezultat;
228 static class KomparatorPoSalama implements Comparator<Stavka> {
230 @Override
231 public int compare(Stavka a1, Stavka a2) {
232 int rezultat = a1.getSala().compareTo(a2.getSala());
234 if (rezultat == 0) {
235 rezultat = a1.getDan() - a2.getDan();
237 if (rezultat == 0) {
238 rezultat = a1.getPocetak() - a2.getPocetak();
242 // Vratimo izracunati rezultat poredjenja
243 return rezultat;
247 static class KomparatorPoDuziniPredavanja implements Comparator<Stavka> {
249 @Override
250 public int compare(Stavka a1, Stavka a2) {
251 int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak();
253 // Vratimo izracunati rezultat poredjenja
254 return rezultat;
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner