Avatar billede moscoew Nybegynder
09. marts 2010 - 15:47 Der er 6 kommentarer og
1 løsning

Hjælp til CD-Arkiv

Hej Eksperter,

Jeg sidder og forsøger at løse en opgave som lyder således:

Lav et CD‐arkiv der kan bruges til at lagre og fremfinde cd'er. Programmet skal kunne gemme cd'er,
finde cd'er ud fra titel og kunstnerog slette cd'er. Når man får et søgeresultat skal det være sorteret
alfabetisk, til dette bruges Comparable‐interfacet og Collections.sort().

Jeg har fået lavet følgende, men det fungerer ikke helt.


Main

package CDArchive;
import java.io.File;
import java.util.*;
import dk.au.hum.imv.persistence.io.ObjectIO;

public class Main {
   
    public static void main (String [] args) {
       
    ObjectIO io = new ObjectIO();
    File saveFile = new File("//Users/john/cder.ser");
           
    CDArchive cder = new CDArchive();
   
    CDs cd1 = new CDs ("Muse", "'Absolution'");
    CDs cd2 = new CDs ("The Storm", "'Where the storm meets the ground'");
    CDs cd3 = new CDs ("Evanescence", "'Fallen'");
    CDs cd4 = new CDs ("Kaiser Chiefs", "'Off with their heads'");
    CDs cd5 = new CDs ("Mew", "'Frengers'");
    cder.addCd(cd1);
    cder.addCd(cd2);
    cder.addCd(cd3);
    cder.addCd(cd4);
    cder.addCd(cd5);
   
    for (CDs cd: cder.getCdByTitel("Absolution"))
    {
        System.out.println(cd.getKunstner()+":"+cd.getTitel());
    }
   
    //write object
    io.saveObject (cder, saveFile);
   
    }
}


CDArchive

package CDArchive;
import java.util.*;

public class CDArchive{

    private ArrayList <CDs> cder = new ArrayList<CDs>();
       
    public void addCd (CDs cd) {
        cder.add (cd);
       
    }
   
    public void removeCd (CDs cd) {
        cder.remove (cd);
       
    }
   
    public ArrayList <CDs> getCdByKunstner (String kunstner) {
        ArrayList <CDs> resultat = new ArrayList <CDs>();
       
        for (CDs element : cder) {
            if (element.getKunstner().equals(kunstner)) {
                resultat.add(element);
            }
        }
        return resultat;
       
    }
   
    public ArrayList <CDs> getCdByTitel (String titel) {
        ArrayList <CDs> resultat = new ArrayList <CDs>();
       
        for (CDs element : cder) {
            if (element.getTitel().equals(titel)) {
                resultat.add(element);
            }
        }
        return resultat;
    }
   
    public ArrayList<CDs> getAllCds() {
        ArrayList<CDs> resultat = new ArrayList<CDs>(cder);
        Collections.sort(resultat);
        return resultat;
    }
   
}


CDs

package CDArchive;

public class CDs implements Comparable { // Melder fejl her
       
        private String kunstner;
        private String titel;

        //Constructor
        public CDs (String kunstner, String titel) {
           
            this.kunstner = kunstner;
            this.titel = titel;
        }
       
        public void setKunstner (String kunstner) {
            this.kunstner = kunstner;
        }
       
        public void setTitel (String titel) {
            this.titel = titel;
           
        }
       
        public String getKunstner () {
            return kunstner;
       
        }
       
        public String getTitel () {
            return titel;
       
        }
       
        public void find () {
           
        }

        @Override
        public int compareTo(CDs o) { // Melder fejl her
            return this.getKunstner().compareTo(o.getKunstner());
        }

    }


Nogen der lige kan gennemskue fejlene?
På forhånd tak.
Avatar billede arne_v Ekspert
09. marts 2010 - 15:54 #1
public class CDs implements Comparable<CDs>
Avatar billede arne_v Ekspert
09. marts 2010 - 15:55 #2
eller:

public int compareTo(Object o)

men det foerste er nok bedst !
Avatar billede moscoew Nybegynder
09. marts 2010 - 16:17 #3
Tak! Det reducerede mængden af fejl.

Når jeg kører programmet fra main, så brude den vel udskrive kunstner og titel ud fra forløkken:

for (CDs cd: cder.getCdByTitel("Fallen"))
    {
        System.out.println(cd.getKunstner()+":"+cd.getTitel());
    }


Der sker ikke rigtig noget. Når jeg forsøger på at udskrive System.out.println(cder); får jeg følgende besked i promten:  iCDArchive.CDArchive@72e3b895
Avatar billede arne_v Ekspert
09. marts 2010 - 16:23 #4
System.out.println(cder);

kalder toString metoden for iCDArchive.CDArchive - og den arvede fra Object virker som du ser.

Proev og lav toString en som udskriver antal og evt. noget data.
Avatar billede moscoew Nybegynder
09. marts 2010 - 16:31 #5
du må undskylde min uvidenhed, men er ikke helt med på hvor du vil hen.... ;)
Avatar billede arne_v Ekspert
09. marts 2010 - 16:39 #6
Hvis du i CDArchive klassen laver en:

@Override
public String toString()

metode som bl.a. udskriver antal, saa kan du nemmere printe arkivet og se hvor det gaar galt.
Avatar billede arne_v Ekspert
26. april 2010 - 03:34 #7
all set ?
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