Forum » Programiranje » [Java] Sortiranje objektov
[Java] Sortiranje objektov
ta_pravi ::
Lep pozdrav
Mene pa zanima, kako bi v javi posortiral nek objekt po določenem atributu, ki bi si ga izbral?
-recimo, da imam knjižnico sortirnih metod
-imam objekte istega tipa vsak ima enako atributov, ki pa so različni
-v testnem programu pa bi si eno od teh izbral in posortiral objekte po izbranem atributu (npr. stevilo let)
???
LP
Mene pa zanima, kako bi v javi posortiral nek objekt po določenem atributu, ki bi si ga izbral?
-recimo, da imam knjižnico sortirnih metod
-imam objekte istega tipa vsak ima enako atributov, ki pa so različni
-v testnem programu pa bi si eno od teh izbral in posortiral objekte po izbranem atributu (npr. stevilo let)
???
LP
ta_pravi
- spremenilo: snow ()
Karlos ::
@Bojevnik
Bublesort niti ni učinkovit, je pa preprost za implementacijo.
http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html
Bublesort niti ni učinkovit, je pa preprost za implementacijo.
http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html
Sai Baba: "Dam vam to, kar hočete, da boste hoteli to, kar vam želim dati."
Bojevnik ::
Sorry, kot kaže sem si narobe zapomnu od osnov programirajna
Zgodovina sprememb…
- spremenilo: Bojevnik ()
ta_pravi ::
ja sej te sortirne metode poznam: mam pa za nardit v nekem razredu, iz katerega bom potem ekstendal objekte metodo compareTo(), ki jo implementira razred comparable. S to metodo naj bi potem s pomočjo razreda v katerem so sortirne metode , sortiral objekte po različnih atributih.(v testnem razredu).....pa mi ne gre v glavo kako naj bi to nardil nekako univerzalno, da bi compareTo() metoda delala potem na različnih atributih objekta....
ma kdo kako idejo??
ma kdo kako idejo??
ta_pravi
Vesoljc ::
po poljubnih paramaterih?
jah rabis se en parameter, ki ti doloca po katerem atributu ti primerja ala:
objekt a,b;
a.compareTo( b, SIZE );
a.compareTo( b, LENGTH );
etc..
kjer sta SIZE in LENGTH pac neka enumeratorja/flaga, ki dolocata tip sortiranja.
minus je to, da moras v sami compare funkciji narest dinamicen branch, ki naredi primerjavo na dolocenem tipu (lahko da tudi ne uspe, ce recimo a in b nimata istih atributov)
jah rabis se en parameter, ki ti doloca po katerem atributu ti primerja ala:
objekt a,b;
a.compareTo( b, SIZE );
a.compareTo( b, LENGTH );
etc..
kjer sta SIZE in LENGTH pac neka enumeratorja/flaga, ki dolocata tip sortiranja.
minus je to, da moras v sami compare funkciji narest dinamicen branch, ki naredi primerjavo na dolocenem tipu (lahko da tudi ne uspe, ce recimo a in b nimata istih atributov)
Abnormal behavior of abnormal brain makes me normal...
infiniteLoop ::
A to bi prav rad nekaj po svoje caral? Ali samo ne poznas standardne knjiznice? Za oboje, arraye in liste obstajajo sort metode, ki vzamejo Comparator kot parameter.Torej vse kar moras narediti je implementirati Comparatorje za polja po katerih hoces sortirati in jih "pofujtrati" sort metodam. That's it! Ce bi se pa rad sam matral s sort algoritmi (ker jih studiras ali karkoli ze) pa ti predlagam pa uberes isto strategijo, ker je standardna. Torej dodaj tudi sort metodo, ki sprejme Comparator.
None of us is as dumb as all of us.
ta_pravi ::
...torej compareTo() metodo, bi poklical v vsaki sortirni metodi(uporabil bom sortirne metode, ki so že napisane na netu). tako da moram predelat compareTo() metodo v razredu, kjer imam definiran objekt, ta razred pa implementira Comparable.
Moj problem je, da ne znam preuredit compare to metode, da bi ji lahko podal parametre , ki bi povedali po katerem atributu sortiram objekte...
??
LP
Moj problem je, da ne znam preuredit compare to metode, da bi ji lahko podal parametre , ki bi povedali po katerem atributu sortiram objekte...
??
LP
ta_pravi
infiniteLoop ::
Pa zakaj bi na vso silo rad uporabil neke nestandardne sortirne metode? A bi rad izumil kvadratno kolo? Evo podajam se en snelkurs primer:
Razred nad katerim se bomo izzivljali:
Izzivljanje:
Evo tolko za zdaj, ker je pozno.
Razred nad katerim se bomo izzivljali:
public class Oseba implements Comparable { private String _ime; private int _starost; public Oseba(String ime, int starost) { setIme(ime); setStarost(starost); } public String getIme() { return _ime; } public void setIme(String ime) { _ime = ime; } public int getStarost() { return _starost; } public void setStarost(int starost) { _starost = (starost < 0) ? 0 : starost; } public int compareTo(Object o) { //po "defaultu" sortirajmo po imenu return getIme().compareTo(((Oseba)o).getIme()); } public String toString() { return getIme() + " - " + getStarost(); } }
Izzivljanje:
import java.util.Arrays; import java.util.Comparator; public class Zagon { public static void main(String[] args) { Oseba[] osebe = new Oseba[] {new Oseba ("Franc", 13), new Oseba("Andrej", 55), new Oseba("Simon", 23)}; Arrays.sort(osebe); //uredi po defaultu - v nasem primeru po imenu; System.out.println("Po imenu: "); System.out.println(Arrays.toString(osebe)); Comparator starostni = new Comparator() { public int compare(Object o1, Object o2) { return ((Oseba)o1).getStarost() - ((Oseba)o2).getStarost(); } }; Arrays.sort(osebe, starostni); System.out.println("Po starosti: "); System.out.println(Arrays.toString(osebe)); Comparator imeNazaj = new Comparator() { public int compare(Object o1, Object o2) { return ((Oseba)o2).getIme().compareTo(((Oseba)o1).getIme()); } }; Arrays.sort(osebe, imeNazaj); System.out.println("Po imenu nazaj: "); System.out.println(Arrays.toString(osebe)); } }
Evo tolko za zdaj, ker je pozno.
None of us is as dumb as all of us.
ta_pravi ::
...fora je v tem, da mam za nardit nalogo v kateri je navodilo da naj naredim knjižnico sortirnih metod.
ta_pravi
ta_pravi ::
aja ...ta koscek meni v javi ne dela: return getIme().compareTo(((Oseba)o).getIme());
ta_pravi
ta_pravi ::
public static void straightInsertion(NepOglas[] a, Comparator c) //navadno vstavljanje DELUJE
{
int i,j;
NepOglas x;
for (i=1; i manjse a.length; ++i)
{
x=a[i];
for (j=i-1; (j>=0 && (x.compareTo(a[j]) > 0)); --j) //tukaj se bo obračalo za smer sortiranja
a[j+1]=a[j];
a[j+1]=x;
//izpis tabele
}
}
EVO tako bi popravil mojo metodo za sortiranje! Da bi ji potem, ko bi jo poklical v testnem programu podal se parameter comparator, po katerem želim sortirat tabelo objektov.
.....nevem pa še kam naj vtaknem v tej metodi ta moj Comparator c:)
????
LP
{
int i,j;
NepOglas x;
for (i=1; i manjse a.length; ++i)
{
x=a[i];
for (j=i-1; (j>=0 && (x.compareTo(a[j]) > 0)); --j) //tukaj se bo obračalo za smer sortiranja
a[j+1]=a[j];
a[j+1]=x;
//izpis tabele
}
}
EVO tako bi popravil mojo metodo za sortiranje! Da bi ji potem, ko bi jo poklical v testnem programu podal se parameter comparator, po katerem želim sortirat tabelo objektov.
.....nevem pa še kam naj vtaknem v tej metodi ta moj Comparator c:)
????
LP
ta_pravi
Gwanaroth ::
Ti to rešuješ za Osnove algoritmov in podatkovnih struktur 1 ?
Lights often keep secret hypnosis..
infiniteLoop ::
Ne bom prevec pameten, ampak kaj ce bi uporabli comparator tam, kjer delas primerjavo (to compare - primerjati)
Torej namesto:
x.compareTo(a[j])
napisi:
c.compare(x, a[j])
Torej namesto:
x.compareTo(a[j])
napisi:
c.compare(x, a[j])
None of us is as dumb as all of us.
tjaz24 ::
Lepo pozdravljeni mene pa zanima kje lahko dol potegnem DR Java 2.0 ki ga rabim na faksu za matematiko? Kakšen kj ve kje bi ga lahko najdu?
hvala
hvala
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Podatkovni tipOddelek: Programiranje | 3791 (3443) | piki12 |
» | [Java] Sortiranje razredovOddelek: Programiranje | 1449 (1196) | Spura |
» | [Naloga][Java] UlomkiOddelek: Programiranje | 2660 (2508) | SkIDiver |
» | [Java] Tezave s stringomOddelek: Programiranje | 1639 (1578) | Sergio |
» | Java - sortiranje 2D tabeleOddelek: Programiranje | 1714 (1663) | SkIDiver |