gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Lavirint, objedinjeno resenje, ubaceno brisanje putev na kraju rada
[spa2-materijali.git] / PretrazivanjeSaVracanjem / Lavirint / ObjedinjenoResenje / Resenje.java
index 5732427..dbabd6d 100644 (file)
@@ -1,44 +1,72 @@
-/**\r
- * Klasa Resenje koristi se za pamcenje pronadjenog puta.\r
- * \r
- * Polje Polja se koristi za pamcenje svih polja na putu.\r
- * \r
- * Polje nepromenljivaListaPolja je dodata da se omoguci\r
- * pristup poljima resenja "spolja" (za proveru kvaliteta puta na primer), \r
- * ali tako da ne moze da se utice na sam sadrzaj te liste.\r
- */\r
 import java.util.ArrayList;\r
-import java.util.List;\r
 import java.util.Collections;\r
+import java.util.List;\r
+\r
+import javafx.scene.paint.Color;\r
 \r
-public class Resenje implements Cloneable {\r
+/**\r
+ * Klasa Resenje koristi se za pamcenje puta kroz mapu.\r
+ */\r
+public class Resenje {\r
+\r
+       // Pamtimo sva polja na putu\r
        private ArrayList<Polje> polja;\r
+\r
+       // Dodato da se omoguci pristup poljima resenja "od spolja" (za proveru kvaliteta puta na primer),\r
+       // ali tako da ne moze da se utice na sam sadrzaj te liste\r
        private List<Polje> nepromenljivaListaPolja;\r
 \r
-       Resenje() {\r
+       // Potrebno za graficki prikaz\r
+       private String naziv;\r
+\r
+       // Potrebno za graficki prikaz\r
+       private Resenje(String naziv, Color boja) {\r
                polja = new ArrayList<Polje>();\r
                nepromenljivaListaPolja = Collections.unmodifiableList(polja);\r
+               this.naziv = naziv;\r
+               Prikaz.put(naziv, polja, Polje::getX, Polje::getY, this::toString, boja);\r
+       }\r
+\r
+       // Kreira novo prazno resenje\r
+       public Resenje() {\r
+               this("Trenutni", Prikaz.TIRKIZNA);\r
+       }\r
+\r
+       // Kreira novo resenje sa istim sadrzajem kao original\r
+       public Resenje(Resenje original) {\r
+               this("Optimalan", Prikaz.LJUBICASTA);\r
+               polja.addAll(original.polja);\r
        }\r
 \r
-       // Dodaje pulje u resenje\r
+       // Dodaje polje u resenje\r
        public void dodaj(int x, int y, int v) {\r
                polja.add(new Polje(x, y, v));\r
+               Prikaz.osveziPut(naziv);\r
        }\r
 \r
-       // Izbacuje polje iz resenja\r
+       // Izbacuje poslednje polje iz resenja\r
        public void izbaciKraj() {\r
                if (getLength() > 0) {\r
                        polja.remove(getLength() - 1);\r
+                       Prikaz.osveziPut(naziv);\r
                } else {\r
-                       System.err.println("greska: resenje je vec prazno");\r
+                       throw new IllegalStateException("Resenje je vec prazno");\r
                }\r
        }\r
 \r
        // Stampa resenje\r
        public void stampaj() {\r
                System.out.println(getLength());\r
-               for (int i = 0; i < getLength(); i++)\r
+               for (int i = 0; i < getLength(); i++) {\r
                        System.out.println(polja.get(i));\r
+               }\r
+               Prikaz.put("Trenutni", null, null, null);\r
+               Prikaz.put("Optimalan", null, null, null);\r
+               Prikaz.put("Najbolji", polja, Polje::getX, Polje::getY, this::toString, Prikaz.LJUBICASTA);\r
+       }\r
+\r
+       public String toString() {\r
+               return getVrednost() + "\u20ac " + getLength() + "m";\r
        }\r
 \r
        // Vraca duzinu resenja\r
@@ -46,28 +74,18 @@ public class Resenje implements Cloneable {
                return polja.size();\r
        }\r
 \r
-       // Vraca i-to polje na putu. Ne koristi se u ovoj verziji zadatka.\r
-       // Moze se koristiti za proveru kvaliteta resenja\r
+       // Vraca i-to polje na putu\r
+       // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja\r
        public Polje getPolje(int i) {\r
                return polja.get(i);\r
        }\r
 \r
-       // Vraca sva polja na putu. Ne koristi se u ovoj verziji zadatka.\r
-       // Moze se koristiti za proveru kvaliteta resenja\r
+       // Vraca sva polja na putu\r
+       // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja\r
        public List<Polje> getPolja() {\r
                return nepromenljivaListaPolja;\r
        }\r
 \r
-       // Kreira klon od resenja\r
-       @Override\r
-       public Resenje clone() {\r
-               Resenje rez = new Resenje();\r
-               for (Polje p : polja) {\r
-                       rez.dodaj(p.getX(), p.getY(), p.getV());\r
-               }\r
-               return rez;\r
-       }\r
-\r
        // Vraca vrednost puta\r
        // Vrednost se definise kao zbir svih vrednosti polja na putu\r
        public int getVrednost() {\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner