Hilfe bei Supermarkt-Simulation

Registriert
März 2009
Beiträge
6
Hey,
Ich brauche ma kurz Hilfe bei meiner Supermarkt-Simulation im Java-Editor.

Ich wollte, dass in der View für alle fünf Minuten oder so angezeigt wird, wie viele Kunden an jeder Kasse sind, wie viele es insgesamt heute waren bla keks

ODER (hat ich eben die Idee, weiß aber bei dieser Idee noch weniger wie ich es umsetzen soll)

Ich wollte irgendwie das eine Uhr in der View läuft- also nicht mit realer sondern sozusagen virtueller Zeit - (..vielleicht irgendwie mit for, also for (int i=0; i<720;i++) oder so...) Aber das gleichzeitig die Kunden in die Kasse gehen und so ...
Währenddessen sollen aber die Kunden (alle kunden haben eine zufällige abarbeitungszeit für die Kassen(Queue)) weiter an die Kassen kommen und gehen, sodass sich die Zahlen in den Textfeldern für die anzahl der Kunden an jeder Kasse ändern.

Achja und wie ich das machen soll, dass die kunden dann auch gehen, wenn sie vorne an der kasse sind (also erstes element in der queue) und ihre abarbeitungszeit vorbei ist, weiß ich auch noch nicht...


aaaaahh Hilfe :(:(

Hoffe auf sehr schnell Hilfe vor meinem Nervenzusammenbruch xD

LG informatikgirl

PS: Wenn jemand meint, dass er mir vielleicht helfen kann, ich würds gerne im ICQ mir dann erklären lassen ;) ist einfacher als im Forum denke ich...
 
Zuletzt bearbeitet:
Wie genau soll das Ganze sein?
Also wie lange sollen die Kunde an der Kasse(Wie viele?) stehen, wenn sie gerade dran sind (Also unterschiedliche "Warenmengen")?
Muss das ganze grafisch sein?
 
Also die Kunden sind sozusagen Elements (glaub ich) und die haben als parameter int abarbeitungszeit und die wird zufällig gewählt. Die stehen dann halt an den kassen solange wie ihre abarbeitungszeit es angibt und werden dann wieder herausgenommen. währenddessen werden aber shcon wieder neue kunden gekommen sein, die sich auch hinter ihm anstellen, solange es nicht mehr als fünf sind (in dem fall würde sich eine neue kasse öffnen)
ich wollte es nicht groß darstellen!! nur halt felder in denen uhrzeit und anzahl der kunden angegeben sind...

Informatikgirl
 
Hallo

Hast du denn bereits schon etwas Code? Wenn ich das mit den Kunden so lese denke ich an Threads.
Jeder Kunde ist ein Thread Objekt welcher eine zufällige Zeit lang läuft.
Die Kassen sind eine bestimmte Anzahl Objekte und haben den entweder den Status geöffnet oder geschlossen.
Nach einer bestimmten Zeitspanne muss überprüft werden ob der Status von Kassen-Objekte geändert werden muss.
Dann gibt es noch einen Thread der die Zeit simuliert. Mit einem Parameter legt man fest ob eine Stunde, ein Tag oder ein Jahr simuliert werden soll.
Ich weiss nicht wie deine Kenntnisse sind aber ein paar Tücken muss man wahrscheinlich schon noch lösen...
Hilft dir das weiter?

Gruss
raumgleita
 
Zuletzt bearbeitet:
Pro Kunde ein Thread ist problematisch (bei vielen Threads wird das System langsam, man muss zwischen den Threads synchronisieren weil die nicht zwangsweise alle gleich schnell dann abgearbeitet werden usw.). Ich hatte in meiner Diplomarbeit (in Java) auch eine Simulation (wenngleich eine ganz andere Problemstellung). Ich würde dir folgendes (grob skizziert) vorschlagen:
- die Simulation wird in diskrete Zeitschritte unterteilt. D.h. alle x Millisekunden werden die Aktionen aller Kunden nacheinander berechnet (bei mir waren es 40ms, damit man auf flüssige 25fps kommt). Im Anschluss daran wird auch die Ansicht neu gezeichnet und dann gewartet (sleep) bis die Zeit abgelaufen ist.
- Zur Steigerung der Performance kann die Gruppe der Kunden unterteilt werden und dann pro vorhandener CPU ein Thread benutzt werden. Mach dieses Multithreading aber nur wenn es aus Performancegründen wirklich nötig sein sollte! Das macht die Entwicklung nämlich komplexer, da man auf die Synchronisierung und Threadingprobleme achten muss!
- Als Zeichenfläche habe ich eine JComponent erweitert und zeichne diese mittels repaint() neu. Das kann auch bei dir sinnvoll sein, da man in so eine Zeichenfläche dann auch beliebig Text oder was auch immer reinzeichnen kann (und später könntest du auch die genaue Bewegung der Kunden malen).
- jeder Kunde wird als einzelnes Objekt hinterlegt. Die "Intelligenz" der Kunden wird in der Kundenklasse selbst hinterlegt. In deinem Fall besteht die Intelligenz wohl nur aus dem Runterzählen eines Counters bis ihre Abarbeitungszeit abgelaufen ist.
- Alle aktiven Kunden kommen in eine Datenstruktur (Array, Arraylist oder was auch immer), alle Kunden, die in Zukunft noch kommen werden (aber noch nicht in Aktion sind) in eine weitere Struktur (Queue sortiert nach Zeit), und alle, die fertig sind, in eine dritte (zur Auswertung). Die Hinterlegung der kommenden Kunden hat folgenden Grund: Wenn du die Kunden tatsächlich während der Simulation zufällig erzeugst, so ist unter Umständen (außer du initialisierst den Zufallsgenerator mit dem selben Seed) der Ablauf nicht exakt nachvollziehbar/speicherbar. Dies ist im wissenschaftlichen Bereich aber wichtig, so dass die Daten tatsächlich von Dritten nachvollziehbar sind.
- bei der Berechnung der Aktionen ist unter Umständen ein mehrstufiger Prozess anzudenken falls die Aktionen der Kunden voneinander abhängen (ansonsten werden die Abhängigkeiten nicht korrekt simuliert!). Beispiel: Phase1: Berechnung der durchzuführenden Züge aller Kunden, Phase 2: Tatsächliche Durchführung dieser Züge. Falls es keine Abhängigkeit gibt, braucht man das natürlich nicht.

Das ist natürlich relativ komplex (aber dafür später sehr schön erweiterbar) und vielleicht etwas überdimensioniert wenn du noch nicht mal Eclipse verwendest (Schulprojekt?). Ist das denn eine detaillierte Aufgabenstellung oder sollst du selber was Beliebiges programmieren?
 
Zuletzt bearbeitet:
Zurück
Oben