gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/sortiranje/automobili/Automobili.java b/sortiranje/automobili/Automobili.java
--- /dev/null
@@ -0,0 +1,207 @@
+import java.util.Arrays;\r
+import java.util.Comparator;\r
+import java.util.Objects;\r
+\r
+import org.svetovid.io.SvetovidReader;\r
+\r
+// Tip podataka za predstavljanje automobila\r
+class Automobil implements Comparable<Automobil> {\r
+\r
+ // Osobine koje se ne mogu menjati\r
+ public final String model;\r
+ public final int godiste;\r
+ public final Motor motor;\r
+\r
+ // Osobine koje su slobodno izmenljive\r
+ public String boja;\r
+\r
+ // Osobine koje su zasticene\r
+ private int kilometraza;\r
+\r
+ public Automobil(String model, int godiste, Motor motor, String boja, int kilometraza) {\r
+ this.model = model;\r
+ this.godiste = godiste;\r
+ this.motor = motor;\r
+ this.boja = boja;\r
+ this.kilometraza = kilometraza;\r
+ }\r
+\r
+ public int getKilometraza() {\r
+ return kilometraza;\r
+ }\r
+\r
+ public void vozi(int duzina) {\r
+ this.kilometraza = this.kilometraza + duzina;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+\r
+ // Tekstualna reprezentacija automobila oblika:\r
+ // Zastava 101 (1999) Crvena boja, presao 231000 km\r
+ return model + " (" + godiste + ") " + boja + " boja, presao " + kilometraza + " km";\r
+\r
+ }\r
+\r
+ @Override\r
+ public int compareTo(Automobil that) {\r
+\r
+ // Prvo poredimo naziv modela i ne uzimamo u obzir razlike izmedju velikih i malih slova\r
+ int rezultat = Objects.compare(this.model, that.model, String.CASE_INSENSITIVE_ORDER);\r
+\r
+ // Ako je model isti, poredimo godiste\r
+ if (rezultat == 0) {\r
+ rezultat = this.godiste - that.godiste;\r
+ }\r
+\r
+ // Vracamo rezultat poredjenja\r
+ return rezultat;\r
+\r
+ }\r
+}\r
+\r
+// Tip podataka za predstavljanje motora automobila\r
+class Motor implements Comparable<Motor> {\r
+\r
+ // Osobine koje se ne mogu menjati\r
+ public final String gorivo;\r
+ public final double snaga;\r
+\r
+ public Motor(String gorivo, double snaga) {\r
+ this.gorivo = gorivo;\r
+ this.snaga = snaga;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+\r
+ // Tekstualna reprezentacija motora automobila oblika:\r
+ // Motor [Dizel, 52KW / 69.73 hp]\r
+ return "Motor [" + gorivo + ", " + snaga + " KW / " + snaga * 1.34102 + " hp]";\r
+\r
+ }\r
+\r
+ @Override\r
+ public int compareTo(Motor that) {\r
+\r
+ // Poredimo motore iskljucivo po snazi\r
+ return (int) Math.signum(this.snaga - that.snaga);\r
+\r
+ }\r
+}\r
+\r
+public class Automobili {\r
+\r
+ public static void main(String[] args) {\r
+\r
+ // Ucitavanje automobila\r
+ String fajl = Svetovid.in.readLine("Unesite ime fajla sa automobilima:");\r
+ Automobil[] niz = ucitajAutomobile(fajl);\r
+\r
+ // Ako nismo uspesno ucitali niz, zvrsavamo program\r
+ if (niz == null) {\r
+ Svetovid.out.println("Dati fajl nije mogao da se procita! Proverite da li postoji.");\r
+ return;\r
+ }\r
+\r
+ // Stampanje ucitanog niza\r
+ stampajNiz("Nesortirani niz:", niz);\r
+\r
+ // Sortiranje niza\r
+ sortirajNiz(niz);\r
+ stampajNiz("Sortirani niz:", niz);\r
+\r
+ // Sortiranje niza po drugom kriterijumu\r
+ sortirajNizAlt(niz);\r
+ stampajNiz("Sortirani niz po drugom kriterijumu:", niz);\r
+\r
+ }\r
+\r
+ public static Automobil[] ucitajAutomobile(String fajl) {\r
+\r
+ // Ako ne mozemo da otvorimo fajl, ne ucitavamo automobile\r
+ if (!Svetovid.testIn(fajl)) {\r
+ return null;\r
+ }\r
+\r
+ // Ako mozemo, napravimo precicu 'in' da ne bi morali da\r
+ // svaki put kucamo 'Svetovid.in(fajl)'\r
+ SvetovidReader in = Svetovid.in(fajl);\r
+\r
+ // Koliko ima automobila u fajlu?\r
+ int br = in.readInt();\r
+\r
+ // Napravimo niz odgovarajuce velicine\r
+ Automobil[] rez = new Automobil[br];\r
+\r
+ // Ucitamo automobile\r
+ for (int i = 0; i < br; i++) {\r
+\r
+ // Ucitamo podatke o automobilu\r
+ in.readLine();\r
+ String model = in.readLine();\r
+ int godiste = in.readInt();\r
+ String gorivo = in.readLine();\r
+ double snaga = in.readDouble();\r
+ String boja = in.readLine();\r
+ int kilometraza = in.readInt();\r
+\r
+ // Napravimo automobil\r
+ Motor motor = new Motor(gorivo, snaga);\r
+ Automobil automobil = new Automobil(model, godiste, motor, boja, kilometraza);\r
+\r
+ // Dodamo automobil u niz\r
+ rez[i] = automobil;\r
+\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(String naslov, Automobil[] niz) {\r
+ Svetovid.out.printf("%n%s%n%n", naslov);\r
+ for (Automobil a : niz) {\r
+ Svetovid.out.printf("%20s (%4d) %8s %8.2f KW %8s %8d km %n", a.model, a.godiste, a.motor.gorivo, a.motor.snaga, a.boja, a.getKilometraza());\r
+ }\r
+ }\r
+\r
+ private static void sortirajNiz(Automobil[] niz) {\r
+\r
+ // Sortiramo niz pomocu ugradjenog metoda\r
+ Arrays.sort(niz);\r
+\r
+ }\r
+\r
+ private static class GodisteIKmKomparator implements Comparator<Automobil> {\r
+\r
+ @Override\r
+ public int compare(Automobil a1, Automobil a2) {\r
+\r
+ // Poredimo automobile prvo po godistu\r
+ // Vece godiste je bolje u ovom slucaju\r
+ int rezultat = a2.godiste - a1.godiste;\r
+\r
+ // Ako su godista ista, poredimo kilometrazu\r
+ // Manje predjenih kilometara je bolje\r
+ if (rezultat == 0) {\r
+ rezultat = a1.getKilometraza() - a2.getKilometraza();\r
+ }\r
+\r
+ // Vratimo izracunati rezultat poredjenja\r
+ return rezultat;\r
+\r
+ }\r
+ }\r
+\r
+ private static void sortirajNizAlt(Automobil[] niz) {\r
+\r
+ // Sortiramo niz pomocu ugradjenog metoda\r
+ Arrays.sort(niz, new GodisteIKmKomparator());\r
+\r
+ }\r
+}\r