Dem Konstruktor wird eine Sammlung von Titeln in Form eines Stacks übergeben.
Die Daten sollen dann in eine Queue geschrieben werden, sodass der Stack danach leer ist.
Wie kann man das am besten realisieren?
Java:
publicclassSammlung{privateQueue<String> songs;//KonstruktorpublicSammlung(Stack<String> s){}}//Fuege neue Songs hinzupublicvoidaddNewSongs(String[] neueSongs){}}
das wird nicht funktionieren, weil du nur das oberste element im stack löscht, aber nicht zurückgibst, du musst die Methode popTop() implementieren, wie oben schon jemand gepostet hat, und die benutzen.
du brauchst eine Methode, die dir etwas vom Stack zurück gibt, push legt eins drauf, pop löscht eins.
Oder ist die Methode pop vom java eigenen Stack schon ein poptop ?
dann ist das pop vom java stack einfach überladen, je nachdem ob du nen return willst oder nich, ok dann wird deine methode mit dem stack so funktionieren, wir implementieren immer eine poptop für unseren eigenen stack.
Versteh ich nicht so wirklich.
Im Prinzip muss ich doch den Stack durchlaufen und mit "pop" die Daten einzeln runterwerfen. Gleichzeitig muss ich die Daten mit "enqueue" in die Queue schmeißen.
Oder sehe ich das falsch? Kann man das auch über den Iterator machen? mit "HasNext" ?
ne du lagst schon richtig, der fehler lag bei mir, so wie du es oben hattest sollte es gehen.
Da ich noch nie mit dem java eigenen Stack gearbeitet habe, löscht meine pop immer nur das oberste element.
bei deinem pop ist die PopTop schon mit drin, da sie einen return wert hat.
da deine schleife solange läuft, bis der Stack leer ist, sollte das schon das ende der methode sein.
Du kannst in Java eine Methode nur überladen wenn sich die Methodensignatur unterscheidet. Der Rückgabewert gehört (int Java) nicht zur Methodensignatur.
sowas wie
dann würde es die methode pop() nur 1x mit einem übergabeparameter geben, und daher immer einen wert zurückgeben, ob ich was damit anfange oder nicht. Stimmt das so ?
Schau Dir doch einfach die Stack-Klasse an. Die ist von Vector abgeleitet.
Java:
classStack<E>extendsVector<E>{..../**
* Removes the object at the top of this stack and returns that
* object as the value of this function.
*
* @return The object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @exception EmptyStackException if this stack is empty.
*/publicsynchronizedEpop(){E obj;int len =size();
obj =peek();removeElementAt(len -1);return obj;}/**
* Looks at the object at the top of this stack without removing it
* from the stack.
*
* @return the object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @exception EmptyStackException if this stack is empty.
*/publicsynchronizedEpeek(){int len =size();if(len ==0)thrownewEmptyStackException();returnelementAt(len -1);}
ich geb zu, ich schreibe manchmal ein wenig wirr.
Da ich auf der Uni ohne dem von java mitgeliefertem Stack arbeite, gibt es bei uns die methoden:
pop() löscht das oberste und popTop() gibt das oberste zurück und löscht es.
der Java Stack hat nur pop(), der meinem popTop() entspricht.
Klar. War auch vorher schon richtig.
Ich kenne zwar die Trennung in pop und poptop nicht so, aber ich finde den Java-Stack um den Vector herum auch etwas "gewöhnungsbedürftig".
Ich mach auch nur was der Prof uns sagt, das läuft meistens so ab, das er selber den Stack vorgibt, wir benutzen und erweitern diesen. habe noch nie einen Stack, ne Queue, liste oder baum von java benutz.
Alles kommt vom Prof, darum war ich am anfang auch so bestürzt dass er mit pop() was auslesen will
Wenn Du damit häufiger zu tun hast, häng Dich nicht zu sehr an den Prof. Dass "pop()" ein Element zurückgibt, würde ich als ziemlich "normal" bezeichnen.
Du brauchst die Funktion ja so oder so. Ob Du sie nun poptop oder pop nennst.
Ich denke wir sollen den Stack auch nur zum verständniss selber bearbeiten und intern damit arbeiten.
Als angehender Software-Ingenieur macht das auch sinn, dass wir nicht nur wissen, wie wir etwas benutzen, sondern auch was er genau macht. Ich mach dem Prof mal keine vorwürfe, aber hoffe, dass wir im nächsten Semester mit den Java Komponenten arbeiten werden