Avatar billede ladbye Nybegynder
18. januar 2006 - 14:02 Der er 5 kommentarer og
1 løsning

Print af object

Er igang med en opgave hvor jeg laver et DVD-katalog, med en 2 klasser, hvoraf den ene er kataloget og den anden er filmen.

Nu er det sådan, at jeg fra DVDCatalogue skal printe en liste over alle de DVD'er der er tilføjet. I min klasse MovieDVD har jeg lavet en printfunktion, men nu skal jeg fra DVDCatalogue hente den printfunktion og printe en liste ud over alle tilføjede film.

Der hvor det går galt, er i funktionen printAllDVDs i DVDCatalogue. Nogen der ved hvorfor den fejler? Når jeg kører den i BlueJ, melder den fejl i MovieDVD dvd = (MovieDVD)iter.next();, med en ClassCastException.

Det er måske nemmere at se hvis jeg lige vedlægger koden.

DVDCatalogue, class:
----------------------------------------------------------------------
import java.util.HashMap;
import java.util.Iterator;

public class DVDCatalogue
{
    private String owner;
    private HashMap allDVDs;
   
    public DVDCatalogue( String name )
    {
        owner = name;
        allDVDs = new HashMap();
    }

    public void addDVD( String title, String description, String director, int duration)
    {
        MovieDVD dvd = new MovieDVD(title,description,director,duration);
        allDVDs.put(title,dvd);
    }

    public Object getDVD( String title )
    {
        Object dvd = (MovieDVD)allDVDs.get(title);
        return dvd;
    }

    public void printAllDVDs()
    {
        Iterator iter = allDVDs.keySet().iterator();
        while(iter.hasNext()) {
            MovieDVD dvd = (MovieDVD)iter.next();
            dvd.printMovieDVD();
            System.out.println();
        }
    }
}


Og MovieDVD, class
----------------------------------------------------------------------
public class MovieDVD
{
    private String title;
    private String description;
    private String director;
    private int duration;
   
    public MovieDVD(String theTitle, String theDescription, String theDirector, int theDuration)
    {
        title = theTitle;
        description = theDescription;
        director = theDirector;
        duration = theDuration;
    }
   
        public String getDescription()
    {
        return description;
    }
   
        public String getDirector()
    {
        return director;
    }
   
        public int getDuration()
    {
        return duration;
    }
   
    public void printMovieDVD()
    {
        System.out.print("Title: " + title + "\nDescription: " + description + "\nDirector: " + director + "\nDuration: " + duration + "min");
    }
   
}
Avatar billede gentoo2005 Nybegynder
18. januar 2006 - 14:06 #1
er længe siden jeg har kodet Java, men i

public void printAllDVDs()

MovieDVD dvd = (MovieDVD)iter.next(); // << er det smart at oprette et ny object hver gang ?

Ville det ikke være mere optimalt at definere den uden for loopet, og ittrerer en ny ? jeg ved ikke om dette vil hjælpe på felen, men virker ihvertfald mere logisk for mig.
Avatar billede gentoo2005 Nybegynder
18. januar 2006 - 14:07 #2
forresten, hvad med en toString() function, istedet for PrintMovieDVD() =)
Avatar billede mikkelbm Nybegynder
18. januar 2006 - 14:07 #3
MovieDVD dvd = (MovieDVD)iter.next();

Opretter ikke et nyt objekt, men henter den reference der ligger i listen.
Avatar billede mikkelbm Nybegynder
18. januar 2006 - 14:13 #4
Og det er fordi du henter alle keys ud og ikke values:

Iterator iter = allDVDs.keySet().iterator();

Skal ændres til:

Iterator iter = allDVDs.values().iterator();
Avatar billede mikkelbm Nybegynder
18. januar 2006 - 14:14 #5
Og et svar... Da det er testet og det virker :)
Avatar billede ladbye Nybegynder
18. januar 2006 - 14:22 #6
Ahh, naturligvis. Nu virker det! Takker for det!
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