From: Ivan Pribela Date: Mon, 27 Nov 2017 13:55:17 +0000 (+0100) Subject: Lavirint, objedinjeno resenje, doterana klasa Resenje X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=commitdiff_plain;h=a6cda178fb5053f3854f2866dbe4967b3e106606 Lavirint, objedinjeno resenje, doterana klasa Resenje --- diff --git a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java index 312fa9c..c4c1980 100644 --- a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java +++ b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java @@ -123,7 +123,7 @@ public class Lavirint { if (m.getMat(x, y) == Mapa.IZLAZ) { r.dodaj(x, y, 0); if (optResenje == null || c.compare(r, optResenje) < 0) { - optResenje = r.kopija(); + optResenje = new Resenje(r); } r.izbaciKraj(); return; diff --git a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java index ffb2622..9b92c19 100644 --- a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java +++ b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java @@ -1,48 +1,42 @@ -/** - * Klasa Resenje koristi se za pamcenje pronadjenog puta. - * - * Polje Polja se koristi za pamcenje svih polja na putu. - * - * Polje nepromenljivaListaPolja je dodata da se omoguci - * pristup poljima resenja "spolja" (za proveru kvaliteta puta na primer), - * ali tako da ne moze da se utice na sam sadrzaj te liste. - */ import java.util.ArrayList; -import java.util.List; import java.util.Collections; +import java.util.List; +/** + * Klasa Resenje koristi se za pamcenje puta kroz mapu. + */ public class Resenje { + + // Pamtimo sva polja na putu private ArrayList polja; + + // Dodato da se omoguci pristup poljima resenja "od spolja" (za proveru kvaliteta puta na primer), + // ali tako da ne moze da se utice na sam sadrzaj te liste private List nepromenljivaListaPolja; + // Kreira novo prazno resenje public Resenje() { polja = new ArrayList(); nepromenljivaListaPolja = Collections.unmodifiableList(polja); } - - /** - Pravi novo resenje sa istim sadrzajem kao original - */ + + // Kreira novo resenje sa istim sadrzajem kao original public Resenje(Resenje original) { - // pozovemo "podrazumevani" konstruktor this(); - // iskopiramo sva polja iz originala - for (Polje p : original.getPolja()) { - dodaj(p.getX(), p.getY(), p.getV()); - } + polja.addAll(original.polja); } - // Dodaje pulje u resenje + // Dodaje polje u resenje public void dodaj(int x, int y, int v) { polja.add(new Polje(x, y, v)); } - // Izbacuje polje iz resenja + // Izbacuje poslednje polje iz resenja public void izbaciKraj() { if (getLength() > 0) { polja.remove(getLength() - 1); } else { - System.err.println("greska: resenje je vec prazno"); + throw new IllegalStateException("Resenje je vec prazno"); } } @@ -52,19 +46,9 @@ public class Resenje { for (int i = 0; i < getLength(); i++) System.out.println(polja.get(i)); } - + public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("Resenje: [ "); - if (getLength()>0) { - sb.append(polja.get(0)); - for (int i = 1; i < getLength(); i++) { - sb.append(", " + polja.get(i)); - } - } - sb.append(" ]"); - - return sb.toString(); + return getVrednost() + "\u20ac " + getLength() + "m"; } // Vraca duzinu resenja @@ -72,27 +56,18 @@ public class Resenje { return polja.size(); } - // Vraca i-to polje na putu. Ne koristi se u ovoj verziji zadatka. - // Moze se koristiti za proveru kvaliteta resenja + // Vraca i-to polje na putu + // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja public Polje getPolje(int i) { return polja.get(i); } - // Vraca sva polja na putu. Ne koristi se u ovoj verziji zadatka. - // Moze se koristiti za proveru kvaliteta resenja + // Vraca sva polja na putu + // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja public List getPolja() { return nepromenljivaListaPolja; } - // Kreira nezavisnu kopiju ovog resenja - public Resenje kopija() { - Resenje rez = new Resenje(); - for (Polje p : polja) { - rez.dodaj(p.getX(), p.getY(), p.getV()); - } - return rez; - } - // Vraca vrednost puta // Vrednost se definise kao zbir svih vrednosti polja na putu public int getVrednost() {