Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Erste SchritteViele Objekte einer Klasse "verwalten"
hallo. ich lerne noch, also verzeiht meine Anfängerfrage
Wenn ich eine Klasse (zB. DVDs) habe und nun für jede DVD ein Objekt anlege, dann kann ich die ja nur verwalten, wenn ich die irgendwie indexiere.
Nun meine Frage:
wie macht man das am sinnvllsten? über array, list oder hashset?
und wenn ich die Referenzvariable eines Objektes in einem Array (oder ähnlichen) habe, muss ich dann für jede Variable, die eine Eigenschaft eines Objektes beinhaltet auch in ein Array tun?
Hey, also es gibt Verschiedene Vor- und Nachteile. Zum Beispiel ein Array hat immer eine Fixe Größe, wenn du jetzt eine Array hast mit 100 DVDs und eine Weiter hinzu fügen willst.. dann musst du das Array erweiter und die 100 DVDs rüber Kopieren! Der Vorteil ist, das wenn du die 55 Dvd haben willst einen zugrif von O(1) hast also seher schnell. Bei einer Liste ist es so das die Dynamisch Wächst und das Problem mit dem Array auf gewiesse weiße Löst, nur jetzt ist es so du willst alle DVDs die als Thema Drama haben, dann musst du über alle DVDs gehen um die Richtige zu fienden also eine Laufzeit von O(n) da du dir alle DVDs anschauen musst. Ntürlich kannst du dir am Anfang eine Liste aufbauen mit allen DVDs die Dramen sind!
Ich glaube die Frage ist, wie offt Greifst du zu und wie oft änbert sich die Liste mit DVDs. zb. da mit dem Dramem wenn jetzt 50 mal in der Sekunde nach Dramen DVDs gefragt wird dann ist es schlau eine Liste zu halten. wenn das aber nur einmal im Jar passirt dann reicht eine Suche.
Eine weiter Frage ist, du musst die DVDs irgend wie einheitlich einsortieren. zb. nach Titel oder du vergibst Nummer. Nach Titel würde hier eine HashMap sin machen, bei Nummer über eine Liste!
Also es sind viele Fragen die man zu erst klären sollte!
Wenn die Menge der DVDs vorher bekannt ist, könnte ein Array gut sein. Eine List wäre komfortabel, wenn du nicht weißt vorher, wie groß die Menge der DVDs ist.
Wenn das die Klasse DVD ist:
Java:
public class DVD {
String titel;
public DVD(String titel) {
this.titel = titel;
}
}
Dann brauchst du sowas wie Titel nicht extra zu speichern. Das ist ja der Sinn der Klassen, dass du Werte gruppierst und kapselst.
Java:
List<DVD> dvds = new LinkedList<DVD>();
dvds.add(new DVD("HerrDerRinge"));
System.out.println(dvds.get(0).titel);
(Edit: Natürlich sollte man auf Felder eher über Getter&&Setter zugreifen und die Eigenschaften private machen, aber darauf verzichte aus Einfachheitsgründen mal )
ok, soweit ist meine Frage beantwortet. bevor ich mich in die folgenden Themen einlese, gestattet mir vorab die Frage:
in der Praxis werde ja die Daten der Objekte ja nicht im Programmcode stehen, sondern vom User eingeben und dann in einer sequenziellen Datei gespeichert, so kenne ich es von anderen Programmiersprachen. Das geht hier auch, oder?
oje, da dachte ich ich hätts verstanden.... bitte erklärt mir meinen Denkfehler:
Java:
public class DVD
//Variablen
String titel;
String kategorie;
int fach;
//Konstruktor
DVD film = new DVD ( String ttl, String kat, int fach ) {
this.titel = ttl;
this.kategorie = kat;
this.fach = fach;
}
DVD [] film = new DVD[100];
//die ersten 2 Film-Objekte
film[0] = new DVD ("Blade", "Action", 27);
film[1] = new DVD ("Die Hard", "Action", 28);
}
ohne new gehts auch nicht. ich verzweifle noch. in allen Beispielen, die ich zu arrays gesehen habe, sind die array-variablen vom typ int oder String. meine soll aber vom typ der eigenen klasse sein... wo ist der Denkfehler?
ohne new gehts auch nicht. ich verzweifle noch. in allen Beispielen, die ich zu arrays gesehen habe, sind die array-variablen vom typ int oder String. meine soll aber vom typ der eigenen klasse sein... wo ist der Denkfehler?
Die Klasse DVD sollte nur Attribute und Methoden eines realen DVD-Objektes beschreiben. Also Attribute wie Titel, Erscheinungsjahr, evtl. Format usw. sowie Getter- und Setter-Methoden. Für die Verwaltung der DVDs würde ich eine neue Klasse erstellen, beispielsweise DVDLibrary. Über den Konstruktor kann der Titel der Library sowie, sofern über ein Array, die Grösse des Array mitgeben. Diese Library stellt Methoden wie addDVD(), removeDVD(), findDVD() sowie weitere zur Verwaltung der DVDs zur Verfügung. Der Entwurf kann auch anders aussehen. Poste Deine Überlegungen und Vorschläge.
bei den verlinkten Seiten verstehe ich leider nur Bahnhof.
wo liegt denn nun der Denkfehler? warum macht es wenig Sinn ein Array von der Referenzvariable der Klasse DVD?
Die Referenzvariable muss doch den Typ der Klasse haben. Warum sollte das beim array anders sein?
kann mir jemand vielleicht einen Code-Schnipsel posten, wie ich viele Objekte einer Klasse mittels Array benutzen kann?
public class DVD {
//Variablen
private String titel;
private String kategorie;
private int fach;
//Konstruktor
DVD film = new DVD ( String ttl, String kat, int fach ) {
this.titel = ttl;
this.kategorie = kat;
this.fach = fach;
}
DVD [] film = new DVD[100];
// getter & setter Methoden
}
Java:
Public class DVDVerwaltung {
public static void main( String [] args ) {
//die ersten 2 Film-Objekte, nur zum test, Daten sollen dann über Eingabe-Klassen realisiert werden
DVD film[0] = new DVD ("Blade", "Action", 27);
DVD film[1] = new DVD ("Die Hard", "Action", 28);
// speicher-methodenaufruf (Speicher-Klasse)
}
}
Das dass falsch ist, sagt mir auch Eclipse. aber nicht warum. ich erhoffe mir von euch eine verständliche Erklärung und super wäre auch korrekter code als Beispiel.
Meine Topic-Frage ist noch die selbe. Wie löse ich das Problem viele Objekte mittels array?
public class DVD {
//Variablen
private String titel;
private String kategorie;
private int fach;
//Konstruktor
public DVD ( String ttl, String kat, int fach ) {
this.titel = ttl;
this.kategorie = kat;
this.fach = fach;
}
// getter & setter Methoden
}
Und so machst du das Array[]
Java:
public class DVDVerwaltung {
public static void main( String [] args ) {
DVD[] filme = new DVD[100];
//die ersten 2 Film-Objekte, nur zum test, Daten sollen dann über Eingabe-Klassen realisiert werden
filme[0] = new DVD ("Blade", "Action", 27);
filme[1] = new DVD ("Die Hard", "Action", 28);
// speicher-methodenaufruf (Speicher-Klasse)
}
}
Der Konstruktor enthält mehrere Fehler: 1. Es darf keine Zuweisung erfolgen. 2. Der Bezeichner film wird für das Array verwendet und verursacht den Fehler "Duplicate field DVD.fach". 3. Mit new wird ein Objekt erzeugt und nicht deklariert. 4. In der Parameterliste von new darf keine Typdeklaration vorkommen. Ich empfehle Kapitel 3 in Galileo Computing :: Java ist auch eine Insel – gut zu studieren.