Queue zyklisch

Fohnbit

Top Contributor
Hallo,

ich müsste alle 2 Sekunden ausgeben, ob ein Status false ist.

In einer Methode wird geprüft ob der Status aus ist:
Deklariert:
Java:
Queue<String> q = new LinkedList<String>();

Java:
String s = getProperty("d" + i + "_name").getValue() + " offen";
                    if (!b) {
                        if (!q.contains(s))
                            q.add(getProperty("d" + i + "_name").getValue() + " offen");
                    } else {
                        if (!q.contains(s))
                            q.remove(getProperty("d" + i + "_name").getValue() + " offen");
                    }

Und mit einem Timer wird zyklisch:
Java:
private void sendText() {
        if (q.size() > 0) {
            String s = q.remove();
            q.add(new String(s));
            updateOutputStatus(s);
        }
    }

Das klappt aber so nicht, da der Text nicht als Objekt gilt und somit auch nicht wieder aus der queue gelöscht wird, wenn er wieder auf true geht.

Es soll zyklisch der Status ob ein Fenster in einem Haus offen ist, ausgegeben werden.

Beispiel:
Fenster 1 offen
Fenster 2 offen
Fenster 3 geschlossen

Ausgabe sollte im loop alle 2 Sekunden sein:
Fenster 1 offen
[2s warten]
Fenster 2 offen
[2s warten]
Fenster 1 offen
[2s warten]
Fenster 2 offen
usw ...



wenn in der Zwischenzeit ein Fenster geschlossen wird, soll es aus der Liste verschwinden, aber die Ausgabe soll nicht auf Start zurückspringen.

Beispiel von oben:
Beispiel:
Fenster 1 offen
Fenster 2 geschlossen
Fenster 3 offen

Wenn gerade bei Fenster 2 soll danach
Fenster 3 offen kommen

Die Liste würde dann so aussehen
Fenster 1 offen
Fenster 3 offen


Denk die Queue ist der falsch Ansatz?
 
Das klappt aber so nicht, da der Text nicht als Objekt gilt und somit auch nicht wieder aus der queue gelöscht wird, wenn er wieder auf true geht.
Das dürfte an was anderem liegen:

Java:
String s = getProperty("d" + i + "_name").getValue() + " offen";
                    if (!b) {
                        if (!q.contains(s))
                            q.add(getProperty("d" + i + "_name").getValue() + " offen");
                    } else {
                        if (!q.contains(s))
                            q.remove(getProperty("d" + i + "_name").getValue() + " offen");
                    }
Falls ich mich grad nicht verlese entspricht das ganze:

Java:
String s = getProperty("d" + i + "_name").getValue() + " offen";
                    if (!b) {
                        if (!q.contains(s))
                            q.add(s);
                    } else {
                        if (!q.contains(s))
                            q.remove(s);
                    }

Und auffällig ist da ein if (!q.contains(s)) q.remove(s);



Denk die Queue ist der falsch Ansatz?

Es sollen einfach nur zyklisch die offenen Fenster ausgegeben werden?

Hast du "Fenster" irgendwie sinnvoll modelliert? Dann nutz direkt einen Ringpuffer aus Fenstern, zum ausgeben "spulst" du dann einfach zum nächsten Offenen vor und überspringst alle geschlossenen.



(BTW: noch schlechter kann man Variablen wirklich nicht benennen.)
 
Ok gerade nachgeschaut, LL ist eine das Interface implementierende Klasse. Dennoch würd ich niemals diese Implementierung dafür verwenden. xD
 

Zurück
Oben