R
raYman
Gast
Hallo.
Ich versuche gerade verzweifelt die PriorityQueue von Java zu verwenden.
Und zwar will ich da nur Objeke vom Typ "Event" reintun, den ich mir selber geschrieben habe:
import java.util.*;
meine Klasse EventQueue kapselt einfach eine PriorityQueue. Es gab bestimmte Vorgaben, wie die EventQueue zu verwenden ist, deswegen die Kapsel.
Jetzt geht das ganze aber nicht!
Wenn ich folgendes aufrufe:
ist alles noch wunderbar. Es kommt alles richtig raus.
Nur sobald ich (in "e.propagate()") irgendwie während des Ablaufes neue Events erzeuge, ordnen die sich nicht richtig in die Schlange ein. Ich habe extra das tolle "Comparable"-interface implementiert und auch eine schöne "compareTo()"-Methode gemacht.
Dennoch: Wenn ich ein Event zum Beispiel zum Zeitpunkt 15 einfügen lasse, nachdem, das erste schon wieder raus ist, wird die ganze Reihenfolge der Queue durcheinander gehauen.
Liegt das an meinem compareTo? oder woran kann es noch liegen?
bitte und danke!
mfGrüßen
raYman
Ich versuche gerade verzweifelt die PriorityQueue von Java zu verwenden.
Und zwar will ich da nur Objeke vom Typ "Event" reintun, den ich mir selber geschrieben habe:
import java.util.*;
Code:
import java.util.*;
/**
* Write a description of class Event here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Event implements Comparable
{
private Signal signal;
private boolean value;
private int time;
// [ ... andere Felder weggelassen ... ]
// die verwendete EventQueue
private static EventQueue queue;
public static void setEventQueue(EventQueue queue) { Event.queue = queue; }
public static EventQueue getEventQueue() { return Event.queue; }
// [ ... andere static Methoden weggelassen ... ]
/**
* Constructor for objects of class Event
*/
public Event(Signal signal, int delay, boolean value)
{ this.signal = signal;
this.value = value;
this.time = Event.queue.getTime() + delay;
Event.queue.registerEvent(this);
}
/**
* gibt den Eventzeitpunkt zurück
*/
public int getTime() { return this.time; }
[ ... andere Methoden weggelassen ... ]
/**
* vergleicht einfach den Eventzeitpunkt
*/
public int compareTo(Object that)
{ return ( this.getTime() - ((Event)that).getTime() );
}
public String toString()
{ return this.time + ": " + this.signal + " -> " + this.value;
}
}
meine Klasse EventQueue kapselt einfach eine PriorityQueue. Es gab bestimmte Vorgaben, wie die EventQueue zu verwenden ist, deswegen die Kapsel.
Jetzt geht das ganze aber nicht!
Wenn ich folgendes aufrufe:
Code:
{
new Event(inS, 10, true);
new Event(inS, 30, false);
new Event(inR, 50, true);
new Event(inR, 100, false);
new Event(inS, 120, true);
new Event(inR, 150, true);
new Event(inS, 170, false);
new Event(inR, 180, false);
while (queue.hasMore())
{ Event e = queue.getFirst();
System.out.println(e);
// e.propagate();
}
}
ist alles noch wunderbar. Es kommt alles richtig raus.
Nur sobald ich (in "e.propagate()") irgendwie während des Ablaufes neue Events erzeuge, ordnen die sich nicht richtig in die Schlange ein. Ich habe extra das tolle "Comparable"-interface implementiert und auch eine schöne "compareTo()"-Methode gemacht.
Dennoch: Wenn ich ein Event zum Beispiel zum Zeitpunkt 15 einfügen lasse, nachdem, das erste schon wieder raus ist, wird die ganze Reihenfolge der Queue durcheinander gehauen.
Liegt das an meinem compareTo? oder woran kann es noch liegen?
bitte und danke!
mfGrüßen
raYman