Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 16:49 Der er 27 kommentarer og
1 løsning

Sorter efter ting i object.

Jeg har et array af objecter!

Er nogen der kan tilpasse nedenstående, så den sortere objecter efter object[j].gennemsnit istedet for bare et array af intergers? Uddata skal stadig bare være ligesom inddata, et array af objecter. Bare hvor deres rækkefølge er således at objectet med det højeste gennemsnit kommer først, altså er object[0] osv.:

public static void bsortint(int[] A) {
  int i, j, temp, lastIndex;
  boolean exchangeTookPlace;
  exchangeTookPlace = true;
  for (lastIndex = A.length - 1; exchangeTookPlace; --lastIndex) {
    exchangeTookPlace = false;
    for (j = 0; j < lastIndex; ++j) {
      if (A[j] > A[j + 1]) {
        temp = A[j];
        A[j] = A[j + 1];
        A[j + 1] = temp;
        exchangeTookPlace = true;
      }
    }
  }
}
Avatar billede arne_v Ekspert
19. marts 2004 - 16:52 #1
public static void bsortint(Noget[] A) {
  int i, j, lastIndex;
  Noget temp;
  boolean exchangeTookPlace;
  exchangeTookPlace = true;
  for (lastIndex = A.length - 1; exchangeTookPlace; --lastIndex) {
    exchangeTookPlace = false;
    for (j = 0; j < lastIndex; ++j) {
      if (A[j].gennemsnit > A[j + 1].gennemsnit) {
        temp = A[j];
        A[j] = A[j + 1];
        A[j + 1] = temp;
        exchangeTookPlace = true;
      }
    }
  }
}

formoder jeg ...
Avatar billede arne_v Ekspert
19. marts 2004 - 16:53 #2
Jeg vil iøvrigt klart  anbefale Javas indbyggede sortering med en comparator !
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:09 #3
Hmmm.. hvis det andet virker så... Laver du ikke et svar :-)
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:10 #4
i linje 3 skriver du:
Noget temp;

ska det være noget = temp;
eller noget[] = temp[];
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:11 #5
eller noget tredje ;-)
Avatar billede arne_v Ekspert
19. marts 2004 - 17:12 #6
Noget er navnet på den klasse du soreterer.

Og temp er variabelen.

Så det skal være:

Noget temp:

eller

MinHeltEgenKlasse temp;
Avatar billede arne_v Ekspert
19. marts 2004 - 17:12 #7
og et svar
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:17 #8
den melder bare fejl ved bsortint(Noget[] A) { ved Noget[]. Skal min metode være i samme klasse som mit object?
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:18 #9
Vent... nu virker det! :-) Takker!
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:19 #10
Er der en nem måde hvorpå man kan som input til metoden fortælle om det skal være object[].gennemsnit eller object[].max_antal
Avatar billede arne_v Ekspert
19. marts 2004 - 17:21 #11
Nej.

En af grundene til at jeg synes at Array sort og en comparator er en god løsning.
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:21 #12
og en allersidste ting. hvis jeg kører bsortint på array_af_objekter[]. Hvad hedder så mit array som er sorteret?
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:22 #13
Jeg vil nemlig gerne kunne bruge mit gamle array senere hen.
Avatar billede arne_v Ekspert
19. marts 2004 - 17:25 #14
Oh - ovenståend evar en direkte portering af din int[] sortering d.v.s. at den ødelagde det gamle array.

Noget[] kopi = (Noget[])gamle.clone();
bsortint(kopi);

er nok den nemme løsning !
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 17:35 #15
ok... så mit nye array kommer til at hedde kopi der?
Takker!
Avatar billede arne_v Ekspert
19. marts 2004 - 17:37 #16
Jep
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:00 #17
Hmmm.. syntes desværre ikke den virker!
Jeg har prøvet at skrive object[i].gennemsnit ud, og alle objecter har de rigtige gennemsnit (af typen double).

Men den vil ikke sortere efter det. Den kommer med fejl.
Avatar billede arne_v Ekspert
19. marts 2004 - 19:06 #18
Hvilken fejl ?
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:07 #19
Jeg har prøvet at ændre statement (A[j].gennemsnit > A[j + 1].gennemsnit) til f.eks. 1 > 2, så virker det. Altså når det er false.

Men hvis jeg skriver 1 < 2 så det er true, så går den gal!
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:08 #20
Får bare fejlen
java.lang.NullPointerException
    at Valg.main(Valg.java:119)
Exception in thread "main"
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:11 #21
Jeg har til gengæld også prøvet at udkommentere alt i if sætningen, så vil statement var true, så gør den ingenting... men så kommer der også fejl.
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:15 #22
Så snart jeg udkommentere if-sætningen, så kører det hele.
Så fejlen må ligge der, selvom jeg ikke kan se den :-(
Avatar billede arne_v Ekspert
19. marts 2004 - 19:15 #23
Jeg er lidt lost.

Kan du poste et komplet stykke kode med lidt eksempel data ?
Avatar billede arne_v Ekspert
19. marts 2004 - 19:15 #24
Eller skal jeg prøve at lave et komplet eksempel ?
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:16 #25
Du må meget gerne lave et komplet eksempel som virker hos dig... For så behøver jeg ikke at forstyrre mere, hvis det da er jeg ikke går helt kold :-)
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 19:41 #26
Hej... Jeg har fået det til at virke nu.
Mit eneste problem er at den sortere således at det mindste gennemsnit kommer først. Jeg vil gerne have det største til det komme først osv..
Avatar billede wampiro-uha Nybegynder
19. marts 2004 - 20:28 #27
Avatar billede arne_v Ekspert
19. marts 2004 - 20:37 #28
Du vender bare tegnet.

Fra:

if (A[j].gennemsnit > A[j + 1].gennemsnit) {

til:

if (A[j].gennemsnit < A[j + 1].gennemsnit) {
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester