Forum » Programiranje » [Java] Sortiranje razredov
[Java] Sortiranje razredov
piki12 ::
Lep pozdrav vsem forumašom,
zanima me kako se sortira razrede če imam nekako takole zgrajeno:
Mog
zanima me kako se sortira razrede če imam nekako takole zgrajeno:
abstract class vozilo{ private String ime; } class avto extends vozilo{ } class avtobus extends vozilo{ } class ladja extends vozilo{ } V mainu bi pa rad sortiral po imenu listvozil je po specifikaciji ArrayList<vozilo> Collections.sort(listvozil, new Comparator() { public int compare(vozilo o1,vozilo o2) { return o1.getImeDatoteke().compareTo(o2.getImeDatoteke()); } // javi pravi da tole ni pravilno vendar ne vem zakaj če dodam pri abstraktnem razredu abstract class vozilo implements Comparable<vozilo> });
Mog
zenb ::
Nisem domač v Javi, ampak ali imaš implementiran Comparator ali samo kreiral novo instanco vmesnika? V C# dodaš nov razred, ki podeduje IComparable v katerem napišeš metodo za primerjav, ki vrača integer in potem v Collections.sort uporabiš new MojComparator.
Mislim pa, da ti samo manjka @Override v 15. vrstici.
Mislim pa, da ti samo manjka @Override v 15. vrstici.
piki12 ::
<anonymous MediaOrganizer$1> is not abstract and does not override abstract method compare(Object,Object) in Comparator ---- (Alt-Enter shows hints)
eno vrstico višje piše :/ ne vem kaj bi bilo
ycw_ ::
Napako ti javi, ker hočeš primerjat po metodi (getImeDatoteke), ki ne obstaja v objektu.
v vozilo dodaj metodo:
public String getIme() {
return ime;
}
In nato pri sortu uporabi:
return o1.getIme().compareTo(o2.getIme());
v vozilo dodaj metodo:
public String getIme() {
return ime;
}
In nato pri sortu uporabi:
return o1.getIme().compareTo(o2.getIme());
kr?en ::
package random.stuff; public abstract class Vozilo { private String ime; public String getIme() { return ime; } public void setIme(String ime) { this.ime = ime; } }
package random.stuff; public class Avto extends Vozilo { public Avto(String ime) { setIme(ime); } @Override public String toString() { final StringBuilder sb = new StringBuilder("Avto{"); sb.append("ime='").append(getIme()).append('\''); sb.append('}'); return sb.toString(); } } //na isti nacin sta potem se ostala dva Class-a
package random.stuff; import java.util.Comparator; public class VoziloComparator implements Comparator<Vozilo> { @Override public int compare(Vozilo o1, Vozilo o2) { return o1.getIme().compareTo(o2.getIme()); } }
package random.stuff; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class RandomStuff { public static void main(String[] args) { List<Vozilo> seznamVozil = new ArrayList<Vozilo>(); seznamVozil.add(new Avtobus("MAN")); seznamVozil.add(new Ladja("Titanic")); seznamVozil.add(new Avto("Audi")); seznamVozil.add(new Avto("BMW")); seznamVozil.add(new Avto("Mercedes")); System.out.println(seznamVozil.toString()); Collections.sort(seznamVozil, new VoziloComparator()); System.out.println(seznamVozil.toString()); } }
//izpis [Avtobus{ime='MAN'}, Ladja{ime='Titanic'}, Avto{ime='Audi'}, Avto{ime='BMW'}, Avto{ime='Mercedes'}] [Avto{ime='Audi'}, Avto{ime='BMW'}, Avtobus{ime='MAN'}, Avto{ime='Mercedes'}, Ladja{ime='Titanic'}]
Pa tole bi jaz raje delal z tako, da je Vozilo interface in ne abstraktni razred.
Zgodovina sprememb…
- spremenil: kr?en ()
piki12 ::
Aha dobro pač vajo delam :P taka so navodila bila :)
Emm zanima me kako bi pa recimo da ima ladja velikost sidra atribut, in bi po tem hotel sortirat, ostali objekti ki niso ladja pa imajo velikost sidra 0, kako bi pa tole presortiral.
Drugače pa hvala to ful dobr dela zdej :P
Emm zanima me kako bi pa recimo da ima ladja velikost sidra atribut, in bi po tem hotel sortirat, ostali objekti ki niso ladja pa imajo velikost sidra 0, kako bi pa tole presortiral.
Drugače pa hvala to ful dobr dela zdej :P
Zgodovina sprememb…
- spremenilo: piki12 ()
kr?en ::
Preveris, ce je objekt tipa Ladja
in potem castas objekt v Ladja
ter primerjas po velikosti sidra
Ampak potem imas se razne ostale pogoje, kaj storiti v primeru, ce primerjas Ladja in Avto itd.
if (object instanceof Ladja)
in potem castas objekt v Ladja
Ladja ladja = (Ladja) object;
ter primerjas po velikosti sidra
ladja1.getVelikostSidra() > ladja1.getVelikostSidra()
Ampak potem imas se razne ostale pogoje, kaj storiti v primeru, ce primerjas Ladja in Avto itd.
Spura ::
is not abstract and does not override abstract method compare(Object,Object) in Comparator
----
(Alt-Enter shows hints)
eno vrstico višje piše :/ ne vem kaj bi bilo
Ti si deklariral svoj komparator kot raw type, kar pomeni da mora imeti funkcijo compare(Object, Object). Ti si pa naredil funkcijo compare(vozilo, vozilo).
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c# seminarskaOddelek: Programiranje | 2659 (2332) | tuned |
» | [Java] Podatkovni tipOddelek: Programiranje | 3801 (3453) | piki12 |
» | Sortiranje po večih atributih, javaOddelek: Programiranje | 1675 (1441) | marjan_h |
» | [C#] Delo z okni - urejanje osebeOddelek: Programiranje | 984 (856) | darkolord |
» | [Java] Sortiranje objektovOddelek: Programiranje | 2847 (2847) | tjaz24 |