Avatar billede jonas_j Nybegynder
06. marts 2006 - 22:28 Der er 13 kommentarer og
1 løsning

Hvordan implementerer jeg interfacet Comparable i min kode?

Min opgave er: Lad klassen CD implementere interfacet Comparable idet ordningen på CD-objekter
defineres af antallet af afspilninger af CDen. Test implementeringen af Comparable med en
metode på CDArchive, printArchive, der kan udskrive indholdet af et CD-arkiv sorteret efter
antal afspilninger. Test printArchive-metoden fra exam-metoden i Driver-klassen.

Her er min kode:

Klassen CD:
public class CD implements Comparable
{
    private String artist;
    private String title;
    private int playCount;

    ...
 
    public int compareTo(Object a)
    {
      // Mangler kode hertil :) ???????
      return 0;
    }
}

Klassen CDArchive:

public class CDArchive
{
    private ArrayList<CD> theCDs;

    ...

    public void printArchive()
    {
    // mangler kode hertil :) ??????
    }
}

Der står i koden, hvor jeg mangler kode...

Håber der er nogle som kan hjælpe. Det er noget vi ikke har lært endnu, så det er lidt svært for mig at lave. Men ville alligevel se om jeg kunne :)
Avatar billede arne_v Ekspert
06. marts 2006 - 22:33 #1
du skal lave compareTo saa den returnerer negativ, 0 eller positiv alt afhaengig
af hvordan this sammenlignes med (CD)o normalt baseret paa felterne
Avatar billede jonas_j Nybegynder
06. marts 2006 - 22:39 #2
oki noget med 3 if sætning. Så object1.equals(object2) 1. if(true) return positiv 2. if(false) return negativ else return 0;

Men det er faktisk bare metoden printArchive() jeg er interreseret i :) Men du skal vel lave metoden compareTO ???
Avatar billede arne_v Ekspert
06. marts 2006 - 23:04 #3
hvis du implementerer Comparable saa skal du have en compareTo

hvis du vil sortere efter title kan du bruge:

    public int compareTo(Object a)
    {
      return title.compareTo(((CD)a).title);
    }
Avatar billede arne_v Ekspert
06. marts 2006 - 23:09 #4
i printArchive sorterer du vel og udsjriver bagefter i en loekke
Avatar billede jonas_j Nybegynder
06. marts 2006 - 23:10 #5
ja
Avatar billede jonas_j Nybegynder
06. marts 2006 - 23:12 #6
men tror stadig jeg er lidt i tvivl om compareTo?
Avatar billede arne_v Ekspert
06. marts 2006 - 23:13 #7
i tvivl om hvad ?
Avatar billede jonas_j Nybegynder
06. marts 2006 - 23:14 #8
det der skal stå inden i den, med at retunere positiv, negativ og 0 ??
Avatar billede arne_v Ekspert
06. marts 2006 - 23:28 #9
se eksempel 23:04:17
Avatar billede jonas_j Nybegynder
06. marts 2006 - 23:34 #10
eksempel?? hvor skal jeg kigge henne? :)
Avatar billede mikkel_sommer Nybegynder
07. marts 2006 - 10:13 #11
8 kommentarer højere oppe ;)
Avatar billede snoop_one Nybegynder
15. marts 2006 - 09:49 #12
Du skal bare implementere compareTo(Object a) metoden, så sørger Java for resten.

Dvs. i dit tilfælde så skal du sortere efter antal afspilninger, så skal du have noget kode der ser ud som ala,

public int compareTo(Object a){
  return this.playCount - ((CD)a).getPlayCount();
}

Som du så kan se, så hvis det object du har har et højere playcount end det du sammenligner med (dvs. a) så returneres der et positivt tal osv. iht. compareTo kontrakten.

I din printArchive metode kan du bentytte dig af Collections.Sort metoden der netop sortere efter dette. http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html#sort(java.util.List)

public void printArchive(){
    Collections.sort(theCDs)
    //også skal du bare printe dem ud :)
}

Så håber jeg, at du nu har forstået lidt mere af det :) Men hvis det er helt sort det med collection.sort skal du bare spørger om hvad du ikke kan forstå :)
Avatar billede jonas_j Nybegynder
11. juli 2008 - 12:15 #13
lukket
Avatar billede arne_v Ekspert
11. juli 2008 - 22:12 #14
Det var jo også en måde at afslutte et spørgsmål på !
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