Queue auf einer Seite löschen, andre Seite schreiben

  • Themenstarter Themenstarter Gast2
  • Beginndatum Beginndatum
G

Gast2

Gast
Hi,

ich brauche einen Speicher, in den ca.15 Werte kommen.
Nacheinander soll ein neuer Wert hinzukommen und der älteste Wert raus fliegen.

Ich glaube Queue ist dafür richtig?!

diesen Quelltext habe ich aus javainsel und leicht angepasst
Java:
		Queue<String> queue = new LinkedList<String>();

		queue.offer("Fischers");
		queue.offer("Fritze");
		queue.offer("fischt");
		queue.offer("frische");
		queue.offer("Fische");

		queue.poll();
		queue.offer("Nein, es war Paul!");

		while (!queue.isEmpty())ausgabe += (queue.poll() + "\n");
		txv_ausgabe.setText(ausgabe);
und der funktioniert sehr gut.

Ausgabe:
Fritze
fischt
frische
Fische
Nein, es war Paul!

Jetzt will nach der Ausgabe einen Wert unten anhängen und den ersten löschen.
Wenn ich versuche
Java:
		Queue<String> queue = new LinkedList<String>();

		queue.offer("Fischers");
		queue.offer("Fritze");
		queue.offer("fischt");
		queue.offer("frische");
		queue.offer("Fische");

		queue.poll();
		queue.offer("Nein, es war Paul!");

		while (!queue.isEmpty())ausgabe += (queue.poll() + "\n");
		txv_ausgabe.setText(ausgabe);

		queue.poll();		
		queue.offer("Nein, es war Frank!");

		while (!queue.isEmpty())ausgabe += (queue.poll() + "\n");
		txv_ausgabe.setText(ausgabe);
dann wird "Nein, es war Frank!" angehangen, aber "Fritze" nicht abgeschnitten.
Wenn ich Zeile 15 und 16 tausche, dann wird nichts verändert (der angehangene "Frank" gleich wieder gelöscht).

Die Ausgaben benötige ich.
Wie kann ich dieses Problem lösen?
 
Ich gehe mal davon aus "ausgabe" ist hier einfach nur en String.
Du löschst in der Schleife alle Elemente nacheinander aus der Liste heraus, bis diese leer ist.

Dann willst du wieder ein Element herauslöschen (Zeile 15), was halt nicht mehr geht, da die Liste leer ist und dann fügst du wieder was ein.
Den String "ausgabe" veränderst du dabei allerdings nicht. Das heißt in dem String ist immer noch die komplette Ausgabe von vorhin drin und dieser String erhält jetzt einfach noch das gerade eingefügte Element inklusive aller Elemente, die vorher auch drin waren.

Sprich, deine Methode macht schon das was sie soll (wenn du alle Elemente der Liste herauslöschen willst), damit du aber auch was davon mitbekommst, müsstest du den String neu initialisieren.

Als Alternative zur Queue kannst du aber auch ne ArrayList oder so nehmen und dann immer remove(0) aufrufen um das vorderste Element zu löschen. Bei ca. 15 Elementen sollte es keinen Untershcied machen welche Liste du verwendest
 
nach meiner Logik...
da in der while (Zeile 2) immer wieder pool() aufgerufen wird,
müsste ich doch davon ausgehen,
dass 1.) pool() den ältesten Wert zurück gibt (ausgabe += queue.pool())
und 2.) pool() den ältesten Wert löscht (Zeile 9).

Aber irgendwie funktioniert es doch anders.
Sonst wäre nach der erste while alles gelöscht,
was mir die zweite Version (mit zwei Ausgaben) widerlegt.

Kann mir das jemand erklären?
 
> Bei ca. 15 Elementen sollte es keinen Untershcied machen welche Liste du verwendest

oder wenn dann eben bei der LinkedList bleiben, die hier als Queue verwendet wird,
nur bei der Ausgabe nicht alles löschen!, sondern dort die Liste normal durchlaufen,
das ist wohl der entscheidende Punkt,

dann ist sie in Zeile 14 noch befüllt, Zeile 15 und 16 ändern sie wie gewünscht
und danach könnte der String neu aufgebaut werden, aber von Grund auf, nur mit + bekommt man nicht den Anfang des Strings gelöscht


> Aber irgendwie funktioniert es doch anders.
> Sonst wäre nach der erste while alles gelöscht,
ist es!
> was mir die zweite Version (mit zwei Ausgaben) widerlegt.
da ist noch die erste Ausgabe mit drin
 

Zurück
Oben