Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
9.2
Hallo,
ich wollte mal fragen ob die anderen, dass selbe raus haben wie ich:
===== Numbers ======
Adding 42 to Heap
Adding 27 to Heap
Adding 15 to Heap
Adding 12 to Heap
Adding 23 to Heap
Adding 98 to Heap
Adding 2013 to Heap
Adding 1 to Heap
Got 42 from Heap
Got 27 from Heap
Got 2013 from Heap
Got 98 from Heap
Adding -23 to Heap
Adding 17 to Heap
Adding 0 to Heap
Got 27 from Heap
Got 27 from Heap
Got 27 from Heap
Got 27 from Heap
Got 27 from Heap
Got 27 from Heap
Got 27 from Heap
Summary: Put in 11 numbers, got 11 numbers out again
===== Strings ======
Adding Hallo to Heap
Adding AuD to Heap
Adding toll to Heap
Adding String to Heap
Adding Haus to Heap
Adding Baumkopf to Heap
Got Hallo from Heap
Got toll from Heap
Got toll from Heap
Got toll from Heap
Adding 123 to Heap
Adding Zahl to Heap
Adding Kopf to Heap
Adding Oder to Heap
Got toll from Heap
Got Oder from Heap
Got Kopf from Heap
Got Zahl from Heap
Got AuD from Heap
Got AuD from Heap
Summary: Put in 10 Strings, got 10 Strings out again
// First, some numbers
// Put numbers in, they should come out ===> in order <===
Das schaut noch nicht richtig aus
Einige Anhaltspunkte (vgl. Vorlesung zu den Eigenschaften eines Heaps):
- Jedes Objekt, das reingesteckt wurde, sollte auch wieder rauskommen (wo ist z.B. die 1?)
- Jedes Objekt sollte nur so oft herauskommen, wie man es reingesteckt hat (27?!)
- Das kleinste, noch vorhandene, Objekt im Heap sollte jeweils herauskommen (das erste Herausnehmen der Zahlen sollte also 1 liefern)
Ich bin gerade noch dabei die Aufgabe zu implementieren und am rätseln, ob die Aufgabenstellung mit “benutzen sie zur internen Darstellung ein Array” ein normales array[] meint, oder eine ArrayList bzw Arrays. Ich habe zuerst ein normales array benutzt, kann das array dann aber nicht vergrößern aufgrund der generics…
einen tipp vielleich?
Gedacht ist das schon mit einem normalen “[]”-Array. Gegen eine ArrayList spricht auch nicht wirklich etwas, solange die Heap-Aktionen trotzdem selbst implementiert werden (also nur Zugriffe mittels get()/set()).
Arrays aus Typen mit Generic-Parametern sind immer etwas frickelig, das Vergrößern kann man z.B. ähnlich wie das erste Erstellen lösen.
hey =)
ich würde dir ja meine ausgabe posten, aber ich bin selbst nocht nicht ganz fertig
Was mir bei dir aufgefallen ist:
Adding 42 to Heap
Adding 27 to Heap
Adding 15 to Heap
Adding 12 to Heap
Adding 23 to Heap
Adding 98 to Heap
Adding 2013 to Heap
Adding 1 to Heap
Got 42 from Heap ← eigentlich holt die methode von dem Heap das erste element
Got 27 from Heap ← ganz oben sollte aber die kleinste zahl stehen
Got 2013 from Heap ← deshalb glaub ich ist deine sortierung noch nicht ganz perfekt…
Got 98 from Heap ←
wegen den arrays:
Ich habe ein ganz normales [] Array genommen. Das du das nicht einfach vergrößern kannst stimmt schon. Ich erstelle ein neues Array, falls das alte zu klein sein sollte. Den Inhalt kopiere ich danach von dem kleineren ins größere.
Ich benutze zu Hilfe ein temporäres Array.
Ich wollte nochmal nachfragen, ob ich den Code falsch verstanden habe, oder du dich da vertan hast?
// take some out
for (int i = 0; i < nums.length / 2; i++) { ← das durch 2 bedeutet doch, dass nur die Hälfte wieder rauskommt, oder?
System.out.format(„Got %d from Heap\n“, numHeap.getFront());
out++;
}
Ja richtig erkannt. Ist Absicht, um auch Überlappungen zwischen dem Hinzufügen und Herausnehmen zu testen.
Vielleicht könnten noch ein paar ihre Ausgabe zum vergleichen posten???
===== Numbers ======
Adding 42 to Heap
Adding 27 to Heap
Adding 15 to Heap
Adding 12 to Heap
Adding 23 to Heap
Adding 98 to Heap
Adding 2013 to Heap
Adding 1 to Heap
Got 1 from Heap
Got 12 from Heap
Got 15 from Heap
Got 23 from Heap
Adding -23 to Heap
Adding 17 to Heap
Adding 0 to Heap
Got -23 from Heap
Got 0 from Heap
Got 17 from Heap
Got 27 from Heap
Got 42 from Heap
Got 98 from Heap
Got 2013 from Heap
Summary: Put in 11 numbers, got 11 numbers out again
===== Strings ======
Adding Hallo to Heap
Adding AuD to Heap
Adding toll to Heap
Adding String to Heap
Adding Haus to Heap
Adding Baumkopf to Heap
Got AuD from Heap
Got Baumkopf from Heap
Got Hallo from Heap
Got Haus from Heap
Adding 123 to Heap
Adding Zahl to Heap
Adding Kopf to Heap
Adding Oder to Heap
Got 123 from Heap
Got Kopf from Heap
Got Oder from Heap
Got String from Heap
Got Zahl from Heap
Got toll from Heap
Summary: Put in 10 Strings, got 10 Strings out again
Das kommt bei mir auch raus! Sieht ja auch wie die richtige Reihenfolge aus
Sagt mal wie erzeuge ich dieses Generics Array?
E[] meinArray = new E[<groeße>];
funktioniert ja nicht…
oder soll man einfach:
Comparable[] meinArray = new Comparable[<groeße>];
machen?
EDIT:
Noch eine kleine Frage zur contains(E needle){} Methode.
Die soll man ja rekursiv lösen. Mein Problem ist wie ich das in kleinere Probleme aufteilen kann?
Die Eingangsparameter darf man ja nicht ändern, also wie kann ich dann bei einem weiterem Aufruf, das Gesamtproblem verkleinern?
Arrays von Generics sind so ne Sache.
Wenn ich das recht erinnere, musst du
Comparable[] meinArray = new Comparable[groesse];
schreiben und dann die Warnungen, die das erzeugt, ignorieren (bzw. mit @suppressWarnings(“unchecked”) oder so ähnlich unterdrücken)