gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Sortiranje, Domaci, dodat prvi zadatak za mozganje
[spa2-materijali.git] / sortiranje / Domaci zadaci / Za mozganje / DomaciZadatakZaMozganje1.java
1 import java.util.Arrays;
2 import java.util.Comparator;
4 /*
5 * Sortiranje
6 * Domaci zadatak za mozganje #1
7 *
8 * a) Zasto ovaj program ne sortira niz datuma kako se ocekuje?
9 * b) Kako popraviti program?
10 */
12 // Tip podataka
13 class Datum {
15 public final Integer dan;
16 public final Integer mesec;
17 public final Integer godina;
19 public Datum(String datum) {
21 // Razdvojimo string oko tacaka
22 String[] komponente = datum.split("\\.");
24 // Konvertujemo stringove u brojeve
25 dan = Integer.valueOf(komponente[0]);
26 mesec = Integer.valueOf(komponente[1]);
27 godina = Integer.valueOf(komponente[2]);
29 }
31 @Override
32 public String toString() {
33 return dan + "." + mesec + "." + godina + ".";
34 }
35 }
37 public class DomaciZadatakZaMozganje1 {
39 public static void main(String[] args) {
41 // Kreiramo niz datuma
42 Datum[] datumi = new Datum[] {
43 new Datum("11.4.2015."),
44 new Datum("12.5.2013."),
45 new Datum("21.5.2015."),
46 new Datum("11.4.2014."),
47 new Datum("14.4.2015."),
48 new Datum("14.4.2014."),
49 new Datum("21.4.2015."),
50 new Datum("12.5.2014."),
51 new Datum("11.4.2013."),
52 new Datum("12.5.2015."),
53 new Datum("14.4.2013."),
54 new Datum("16.5.2015.")
55 };
57 // Odstampamo niz
58 Svetovid.out.println("Originalni niz:");
59 for (Datum datum : datumi) {
60 Svetovid.out.println(datum);
61 }
63 // Sortiramo niz
64 Arrays.sort(datumi, new KomparatorDatuma());
66 // Ponovo odstampamo niz
67 Svetovid.out.println("Sortirani niz:");
68 for (Datum datum : datumi) {
69 Svetovid.out.println(datum);
70 }
72 }
73 }
75 class KomparatorDatuma implements Comparator<Datum> {
77 private Comparator<Integer> komparator = new ObrnutiKomparatorBrojeva();
79 @Override
80 public int compare(Datum datum1, Datum datum2) {
82 // Prvo poredimo godine
83 int rezultat = komparator.compare(datum1.godina, datum2.godina);
85 // Ako su godine jednake, poredimo mesece
86 if (rezultat == 0) {
87 rezultat = komparator.compare(datum1.mesec, datum2.mesec);
88 }
90 // Ako su i meseci jednaki poredimo dane
91 if (rezultat == 0) {
92 rezultat = komparator.compare(datum1.dan, datum2.dan);
93 }
95 // Vratimo rezultat poredjenja
96 return rezultat;
98 }
99 }
101 class ObrnutiKomparatorBrojeva implements Comparator<Integer> {
103 @Override
104 public int compare(Integer int1, Integer int2) {
105 if (int1 == int2) {
106 return 0;
107 } else if (int1 < int2) {
108 return 1;
109 } else {
110 return -1;
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner