Rückgabetyp getPreOrder(), etc

Benutzeravatar
seth2k1
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 153
Registriert: 29. Sep 2006 00:53
Wohnort: Darmstadt - Eberstadt

Rückgabetyp getPreOrder(), etc

Beitrag von seth2k1 »

Vielleicht ist es eine etwas blöde Frage, aber ich will auf Nummer sicher gehen ;)
Vector ist ja zum Beispiel auch vom Typ List, und da wir List zurückgeben sollen, wäre es ja auch möglich Vectoren oder ArrayLists zu benutzen. Nun, zur Frage: Dürfen wir das? *g*
"Hallo, ich verkaufe diese modischen Lederjacken!"

HolgerF
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 263
Registriert: 16. Jan 2007 14:20
Kontaktdaten:

Beitrag von HolgerF »

Ja, darfst du. Bzw. musst du ja auch, weil List ein abstrakter Typ ist, den du gar nicht direkt erzeugen kannst ;)
Ganz am Anfang waren die Testcases wohl fehlerhaft und haben erwartet, dass man LinkedList verwendet, aber das ist mittlerweile behoben. Also nutze, was immer dir am geeignetsten erscheint.

Benutzeravatar
seth2k1
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 153
Registriert: 29. Sep 2006 00:53
Wohnort: Darmstadt - Eberstadt

Beitrag von seth2k1 »

Okay, war ne blöde Frage da ich gerade gesehen habe, dass List ein Interface ist. Nuja, einfach den Post nich beachten :D Immer schön weitergehen, hier gibts nichts zu sehen!
"Hallo, ich verkaufe diese modischen Lederjacken!"

murri
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 196
Registriert: 20. Nov 2005 21:18

Beitrag von murri »

kein blöde Frage, habe gerade das gleiche gedacht :wink:

benrub
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 3. Dez 2006 01:26

Beitrag von benrub »

Nochmal eine Frage: Meine Sort-Tests sind allesamt gefailed; ich nutze die Vector-Methode addAll() um den rekursiven Aufruf nützlich umsetzen zu können.
Kann es sein daß diese Methode fehlerhaft ist bzw. die in Vectoren enthaltenen Null-elemente mitaddiert?

yourmaninamsterdam
Nerd
Nerd
Beiträge: 681
Registriert: 26. Okt 2006 14:04
Kontaktdaten:

Beitrag von yourmaninamsterdam »

Könntest du eventuell mal anreißen, was genau du mit der addAll-Methode machst?

Dass sie fehlerhaft ist, kann nämlich nicht sein. Vllt. benutzt du sie anders, als sie funktioniert, oder du hast einen inhaltlichen Fehler.

kechler
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 21. Nov 2004 22:33
Wohnort: Darmstadt

Beitrag von kechler »

Hallo,

ich habe auch mal eine Frage zum Aufbau des Vectors:

Ich erstelle für jeden Knoten einen neuen Vector mit folgendem Aussehen:

[Key, Data, linker Sohn, rechter Sohn]

Ich finde den Aufbau so ziemlich praktisch, um nachhzuvollziehen, wie mein Baum aussieht. Allerdings befürchte ich gerade, dass es vielleicht zu viele Infos sind und das Testsystem damit nicht zurecht kommt. Und bevor ich hochlade wollte ich auf Nummer sicher gehen und fragen, was ihr alles in eurem Vector abspeichert und ob ihr irgendwelche Probleme damit hattet?

Danke im voraus

Christoph B
Computerversteher
Computerversteher
Beiträge: 370
Registriert: 15. Okt 2006 18:28
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Christoph B »

hm, ich würd an deiner stelle nur genau das reinhauen, was man laut Aufgabenstellung reinhaun soll oO

yourmaninamsterdam
Nerd
Nerd
Beiträge: 681
Registriert: 26. Okt 2006 14:04
Kontaktdaten:

Beitrag von yourmaninamsterdam »

Du benutzt also für jeden Knoten einen Vector? Das solltest du auf jeden Fall vermeiden.
Vector ist nichts anderes, als eine synchronisierte Implementierung des Interfaces List. Es ist also genaugenommen nichts anderes als ein Array, das sich je nach Bedarf selbstständig erweitert.
Wenn du einen Knoten darstellen willst, der Key, Data, linker Sohn und rechter Sohn als Daten hat, dann solltest du nicht eine Liste dafür benutzen, sondern eine Klasse erzeugen, die diese Information speichert:

Code: Alles auswählen

public class Node<K extends<Comparable<K>, D> {
	private K key;
	private D data;
	private Node<K, D> left = null;
	private Node<K, D> right = null;
	
	public Node(K key, D data) {
		this.key = key;
		this.data = data;
	}
}
Dazu noch ein paar Getter und Setter und fertig ist deine Knotenklasse.

HolgerF
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 263
Registriert: 16. Jan 2007 14:20
Kontaktdaten:

Beitrag von HolgerF »

Wenn das Ding nur Daten und keine weitere Funktionalität enthält, dann sind Getter/Setter ziemlich sinnlos. Dann macht man die Datenmember public und verletzt damit auch keine Designprinzipien.

benrub
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 3. Dez 2006 01:26

Beitrag von benrub »

yourmaninamsterdam hat geschrieben:Könntest du eventuell mal anreißen, was genau du mit der addAll-Methode machst?

Dass sie fehlerhaft ist, kann nämlich nicht sein. Vllt. benutzt du sie anders, als sie funktioniert, oder du hast einen inhaltlichen Fehler.
Die addAll-methode nutze ich wie folgt, zum Beispiel in der preOrder:

Erstelle neuen Vektor;
Wenn dieser key nicht null ist, füge ich diesen Key zum Vektor hinzu;
Wenn der linke subtree nicht null ist, rufe ich addAll() auf den durch getPreOrder() erstellten pre-Order-Vektor des linken subtrees auf;
das gleiche nochmal für den rechten subtree;
return den vorhin erstellten Vektor;

Kann mir nicht vorstellen wo da der Fehler liegen soll.

Kann es übrigens sein daß wir eine IllegalArgumentException werfen sollen wenn bei add() ein leerer Key übergeben wird? Habe dazu in der Aufgabenstellung nichts gelesen.

maikg2
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 18. Okt 2005 22:29
Wohnort: Darmstadt

Beitrag von maikg2 »

Also die Verwendung von addAll(...) funktioniert korrekt und genauso wie du deinen Ablauf beschreibst mache ich es auch (und ist passed).

Und ja wir sollen bei allen Fehlerhaften Eingaben eine IllegalArgumentException schmeißen.

Benutzeravatar
Antragon
Mausschubser
Mausschubser
Beiträge: 78
Registriert: 26. Okt 2005 13:09
Kontaktdaten:

Beitrag von Antragon »

maikg2 hat geschrieben:Und ja wir sollen bei allen Fehlerhaften Eingaben eine IllegalArgumentException schmeißen.
Nö: Bei "null" als Eingabewert -> Nullpointer
(steht im "Praktikumsübergreifendem" Infotext)

maikg2
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 18. Okt 2005 22:29
Wohnort: Darmstadt

Beitrag von maikg2 »

Vollkommen richtig Antragon.
"Interessant" nur das ich ausschließlich IllegalArgumentException schmeiß und explizit auf NULL überprüfe...

yourmaninamsterdam
Nerd
Nerd
Beiträge: 681
Registriert: 26. Okt 2006 14:04
Kontaktdaten:

Beitrag von yourmaninamsterdam »

Stimmt, ich habe bei null auch IllegalArgument geworfen. Fragt sich, ob bei diesem Praktikum irgendwo zwangsläufig NullPOinter geworfen wird, oder es passieren kann, das Schlüssel "durchgereicht" werden, ohne dass je eine NullPointerException geworfen wird... keine Ahnung...

@benrub: Generell dürfte das so funktionieren. Du wirst irgendwo einen Fehler verbaut haben.
Es ist nur so ein Tip zum Ausprobieren, aber ich würde vorschlagen, weniger Scheme-artig zu Programmieren, um die Übersichtlichkeit zu steigern. Deklarier einen Vektor als Feld in der Klasse und lass alle rekursiven Aufrufe in den gleichen Vector schreiben. Das verhindert, dass bei jedem Rekursionsschritt ein neuer Vector erzeugt wird und Daten durch die Gegend gereicht werden müssen.

Antworten

Zurück zu „Archiv“