11. januar 2001 - 15:50Der er
15 kommentarer og 1 løsning
Jeg har en række objekter og skal sortere dem..??
Jeg har det her lille program, med 3 klasser - class kampresultat, class hold, class turneringdet . Det bruges til at holde styr på resultater for en håndbold turnering - så jeg læser/indtaster et resultat eks ( hold1, hold2, 7, 4 )- dette opretter jeg så et \"hold1\" objekt med som så har dataene , mål=7 vundetkampe=1 points=3 m.m - jeg vil så gerne kunner sortere disse hold objekter efter, antal points - hvis lige efter mål og hvis lige efter navn .....
Og det er jeg gået helt kold i jeg er ude i noget ret komplekst hvor jeg laver en array med refs til objekterne og sammenligner ved at kalde en metode på hold klassen der returnere de givne værdier...det må være lettere
Ehh aha - en comperator ? jeg har læst lidt om collections m.m men syntes det virkede uoverskueligt - kan du give et lille eks på hvordan den her comperator virker ?? / implementeres
public int compareTo(Object other) { Person andenPerson = (Person)other; if (alder < andenPerson.alder) return -1; if (alder > andenPerson.alder) return 1; return 0; } private String navn; private int alder; }
klassefil 4: (Test)
public class CompSortTest { public static void main(String[] args) { Comparable[] compPerson = new Comparable[5]; compPerson[0] = new Person(\"Thomas\",25); compPerson[1] = new Person(\"Peter\",21); compPerson[2] = new Person(\"Martin\",27); compPerson[3] = new Person(\"Hans\",23); compPerson[4] = new Person(\"Søren\",22);
Ok udemærket Karma, men jeg skal jo lave først en sammenligning på typen \"int\", og hvis 2 ens findes,sammenligne på en anden \"int\", og tilsidst sammenligne alfabetisk på navn \"string\" .. men jeg tygger lige lidt på eksemplet...
Så skal du jo bare ændre betingelserne i compareTo-metoden! Til sammenligning af strenge kunne du evt. implementere en metode i samme klasse, som du kan kalde fra compareTo.
>>4meier: Jeg er ikke helt med på, hvorfor du vil flytte din hjælpeklasse(ArrayUtil). Vær da opmærksom på at metoderne er statiske - jeg tror det er dit problem! static: knytter sig til klassen. instans-metoder: knytter sig til objektet.
>>disky: Du har på sin vis ret. Ovenstående er en meget fleksibel og fornuftig program-struktur. Fordele: Genanvendelighed. Letlæseligt. Nemt at udskifte sin sorterings-algoritme.
Genanvendelig endnu nemmere at læse, da man ikke skal bøvle med sin egen sortering. Hvorfor udskifte sorterings algoritmen, den SUN har lavet er Meget hurtig (vist nok quick sort)
Om den ovenstående er fleksibel og fornuftig struktur, kan jo diskuteres. Hvis man selv skulle lave det så korrekt, men siden SUN har lavet det for os er der jo ingen grundt til at lave det igen.
Eller laver du også dine egne stream til IO, og din egen udgave af SWING ??? (kunne ikke nære mig)
p.s. endelig en der bruger {} på den korrekt måde :)))
p.s.s. dette er ikke nogen kritik, bare et alternativ
Det er smag og behag! Jeg er nybegynder og lidt af et \'control-freak\' og kan godt lide at forstå det hele. Det behager mig derfor at selv skrive nogle ting - også selvom de er lavet i forvejen. Har du ikke hørt om KamaSwing2? :->
fedt med så eget respons ;-) Hvad mon der lige præcis sker her ??
Person andenPerson = (Person)other; Der bliver vel lavet et Person objekt med en andenPerson reference ... men ehh hvorfor er det Person der er i parentes ??
Og har i nogen ide om hvorfor man skal kalde ArrayUtil.Print en gang inden den gider sortere ....
1) Som du ved, så arver alle objekter fra typen \'Object\'. Det der sker er, at du fortæller at typen er af \'Person\' - altså en \'cast\'. Jeg går ud fra, at du ved hvordan man \'caster\'.
2) Du behøver da ikke at kalde print før den kan sorterer - du må have modificeret koden til noget forkert. Jeg skal se din kode!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.