Biesterfeld: Verkettete Listen "dynamisch" verschachteln

Beitrag lesen

Hej,

Am Ende soll es also eine BagList-Liste "Bags" geben, die beliebig viele "BagWithPresents" enthält, und diese einzelnen "BagWithPresents" sollen dann beliebig viele "Present"s enthalten. Wieviele "Present"s das sind, kommt aus einer User-Eingabe, wieviele "Bags" benötigt werden kann ebenfalls erst zur Laufzeit (durch den Algorithmus für das Verteilen) festgelegt werden, das mit der Numerierung war also fürs Testen zwar noch irgendwie möglich, führt aber natürlich nicht zu einer Lösung. Wie kann ich so etwas "richtig" machen? Sodass die Objekte sozusagen "dynamisch" erstellt werden?

Du erläuterst dein Problem leider nicht so, dass ich es verstehen würde und den relevante Code, nämlich die Implementierung von BagList und Bag verheimlichst du aber. Ich vermute jetzt mal einfach, dass BagList nichts anderes als ein Wrapper für ein Bag[]-Array und Bag ein Wrapper für ein Present[]-Array sind. Und ich vermute, dass dein Problem die feste Größe der primitiven Java-Arrays sind, richtig?

Kennst du [link:http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html@title=java.util.LinkedList] und [link:http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html@title=java.util.ArrayList]? Helfen dir diese beide Klassen dein Problem zu lösen? Vieleicht möchtest du dich allgemein erstmal etwas zu den verschiedenen Algorithmen und Datenstrukturen, die in Java bereits implementiert sind belesen:

http://www.galileocomputing.de/openbook/javainsel6/javainsel_11_001.htm
http://java.sun.com/javase/6/docs/technotes/guides/collections/index.html

Andererseits, könntest du natürlich auch (wenn also die Kapazität der Arrays tatsächlich dein Problem ist) auch selber eine ähnliche Implementierung wie die Standard-Java-Datenstrukturen vornehmen.

* Starte mit einer initialen Kapazität,
* Prüfe bei jedem add() ob die aktuelle Kapazität überschritten wird,
* falls ja, leg ein neues Array mit größerer Kapazität an,
* kopiere das alte Array in das neue mittels [link:http://java.sun.com/javase/6/docs/api/java/lang/System.html#arraycopy(java.lang.Object,%20int,%20java.lang.Object,%20int,%20int)@title=java.util.System.arraycopy()]

Ansonsten noch eine kurze Anmerkung:

  

>  BagList Bags = new BagList();  
>  // Variablen-Bezeichner bitte immer klein schreiben  
>   
>  Bags.add(BagWithPresents2);  
>  // da dies sonst wie ein statischer Aufruf der add() Methode einer Bags-Klasse aussieht  
> // [...]  

Beste Grüße
Biesterfeld

--
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz