ArrayList - max. Größe festlegen? |
07.12.2011, 12:53 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
ArrayList - max. Größe festlegen? Man benutzt ja in Java ArrayList, wenn man nicht so genau weiß, wieviele Elemente zu einer Liste hinzukommen werden, d.h. immer dann, wenn die Größe veränderbar sein soll. Wie ist das im folgenden Beispiel: In einer Kneipe sind mehrere Bereiche, z.b. Theke und Tür. In jedem Bereich gibt es eine bestimmte Anzahl von Sitzplätzen und eine Gästeliste. Hier ist es ja so, daß die Gästeliste für einen Bereich nach oben beschränkt ist, aber ein Array kann man nicht nehmen, weil ja auch weniger Leute kommen können. Kann man bei ArrayList die maximale Größe nach oben festlegen?? Wenn zum Beispiel 15 Stühle da sind, können maximal 15 Gäste kommen, aber eben auch weniger, weswegen es keinen Sinn machen würde ein Array von 15 zu benutzen. Kann man ein ArrayList - Objekt anlegen und dabei sagen: max. 15 oder weniger? Wie würde das funktionieren? Gibt es sowas? Meine Ideen: ... |
||||||||||||||||||||||
07.12.2011, 13:53 | T0b1a5 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Was du möchtest ist eine Liste mit begrenzten Elementen. So etwas bietet Java m.E. nicht, denn das kannst du dir doch schnell selber schreiben Nimm dir eine Klasse, ein Array und einen maximalen Wert und dann kannst du solange Element in dein Array anfügen, wie die Länge kleiner als dein maximaler Wert ist. Ein Array kannst du durch duplizieren vergrößern Hilft das, oder brauchst du mehr Code? |
||||||||||||||||||||||
07.12.2011, 14:38 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Im Grunde verstehe ich schon, was Du meinst. Aber es geht um Folgendes. Es soll das Nachtleben in einer Bar simuliert werden und dafür gibt es zunächstmal eine Klasse Array, die einen Bereich einer Bar festlegt (Eine Bar soll drei Bereiche haben: Tür, Theke, Bühne). Ein Bereich soll eine bestimmte Größe haben (an Sitzplätze), einen Namen sowie eine Liste, in der sich Gäste eintragen können und diese Liste kann ja nicht länger sein als die Anzahl der Stühle in dem Bereich. Wie realisiert man eine solche Klasse?? Eine Idee:
Guest ist eine weitere Klasse. Aber wo fließt hier mit ein, daß die Länge der Liste nicht größer sein kann, als die Anzahl der Stühle?? |
||||||||||||||||||||||
07.12.2011, 14:42 | Math1986 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Ich verstehe das Problem nicht. Du kannst doch eine ArrayList verwenden und deren Größ (size()) vor dem Einfügen eines Elementes abfragen. Damit kannst du dir deine eigene Einfügemethode schreben. |
||||||||||||||||||||||
07.12.2011, 14:46 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Das Problem ist, daß an dieser Klasse Aray andere Klassen hängen sollen (Bar, Guest...) und ich gar nicht weiß, wie ich jetzt vorgehen soll. Ich hab diese Frage aber in aller Ausführlichkeit schon woanders gestellt (nur das, was ich hier gefragt habe nicht) und deswegen wäre es Crossposting, wenn ich die ganze Aufgabe jetzt hier nochmal stellen würde. |
||||||||||||||||||||||
07.12.2011, 14:54 | T0b1a5 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Dann poste nur den Link Ich verstehe jetzt weniger von der Aufgabe als nach dem ersten Post. |
||||||||||||||||||||||
Anzeige | ||||||||||||||||||||||
|
||||||||||||||||||||||
07.12.2011, 14:55 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Ich glaube, man darf das hier nicht. Dann wird glaube ich der ganze Thread gesperrt. Leider. Ich würde es gerne verlinken. |
||||||||||||||||||||||
07.12.2011, 14:58 | Math1986 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
An welcher Klasse sollen andere Klassen hängen? Ich dachte an sowas wie
Dann darfst du halt nur über diese Methode Gäste hinzufügen, und jede Klasse hat ihre eigene ArrayList Ich verstehe das Problem immer noch nicht |
||||||||||||||||||||||
07.12.2011, 15:06 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Es geht um das Simulieren des Nachtlebens in einer Bar. Und ich weiß nicht, ob ich diese Methode in der Klasse Area überhaupt dort schreiben soll oder nicht vieleicht in einer der vielen anderen Klassen, die in diesem Modell enthalten sind. Die Umschreibung der Klasse Area lautet so: Schreibt eine Klasse Area, die solch einen Bereich darstellt. Jeder Bereich zeichnet sich dadurch aus, dass eine bestimmte Anzahl an Sitzplatzen vorhanden ist. Auerdem hat eine Area einen Namen (also Buhne etc.) und eine Liste mit Gasten. Naturlich darf die Groe der Liste nicht die Anzahl der Sitzplatze uberschreiten. --- Im nächsten Schritt soll eine Klasse Bar geschrieben werden: Bar Entwickelt weiterhin eine Klasse Bar, die jeweils die drei oben genannten Bereiche beinhaltet. Beim Erstellen eines Objektes der Klasse Bar (also im Konstruktor) wird ubergeben, welchem Bereich wie viele Sitzplatze zugesichert werden. Diese Anzahl kann sich nach dem Konstruktoraufruf nicht mehr verandern (Begrundet hier eure Vorgehensweise). Zusatzlich ist die Anzahl der Personen einer Kneipe beschrankt. Es kann nur so viele Gaste geben, wie es auch Sitzplatze gibt. Die maximale Anzahl der Kellner entspricht der Anzahl der Sitzplatze durch funf, mindestens jedoch 3. Live-Bands mit mehr als funf Musikern passen nicht auf die Buhne. Um eine gute Trennung zu ermoglichen, enthalt jede Bar zwei Listen. Zum Einen eine fur die Kellner, zum Anderen eine fur die Musiker. So und ich weiß jetzt nicht, wo ich welche Methoden brauche. Wo muss ich das mit der Listenlänge umsetzen? In Area oder in Bar? |
||||||||||||||||||||||
07.12.2011, 15:37 | Cel | Auf diesen Beitrag antworten » | ||||||||||||||||||||
@Dennis2010: Wieso postest du das in HS-Sonstiges? Es hat hier nichts zu suchen und das erste Mal ist das auch nicht. Ich werde den Thread verschieben. Weiterhin frage ich mich, wieso du wider besseren Wissens im Matheboard Informatikthreads eröffnest. Sicher, das Informatikerboard ist nicht so rege besucht wie wir hier. Dennoch gilt es, die Aufteilungen einzuhalten. Gerade du als Moderator des Deutschboards solltest das verstehen. |
||||||||||||||||||||||
07.12.2011, 16:12 | T0b1a5 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Du wirfst uns hier nur Bröckchen deiner Aufgabe hin und wir sollen dir bei deiner Modellierung helfen? Ich verstehe immer noch Bahnhof :\ Kannst du deinen Beitrag editieren und die ganze Aufgabe anfügen, damit man auch den Rahmen kennt? |
||||||||||||||||||||||
07.12.2011, 16:21 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Wie gesagt, ich habe diese Aufgabe bereits in einem anderen Forum in aller Länge gestellt und ich darf es hier nicht wiederholen, da das Crossposting wäre. Ich mache es aber jetzt trotzdem, auch auf die Gefahr hin, daß es umsonst ist. In den folgenden Aufgaben geht es darum, das Nachtleben einer Kneipe zu simulieren. Wie bei einer echten Kneipe konnen Gaste eine Kneipe betreten, verlassen, Getranke bestellen etc. Naturlich sind nicht alle Gaste gleich, einige von ihnen konnen sich bei erhohtem Alkoholkonsum nicht benehmen und werden aus der Kneipe geworfen. Andere Gaste wiederum sind beruhmt und werden als VIP's behandelt. Neben Gasten gibt es aber auch Kellner, welche die Gaste bedienen. Und was darf jeder Kneipe nicht fehlen? Genau: eine Live-Band. Diese ist also ebenfalls in der Kneipe vertreten. Aufgabe 1 Die Grundlagen Area Alle Kneipen sind gleich aufgebaut. Es gibt eine Buhne, eine Theke und eine Tur. Naturlich sind einige Platze begehrter als andere. Gaste bevorzugen die Buhne, mit der Theke geben sie sich auch noch zufrieden. Am unbeliebtesten ist der Bereich um die Tur. Schreibt eine Klasse Area, die solch einen Bereich darstellt. Jeder Bereich zeichnet sich dadurch aus, dass eine bestimmte Anzahl an Sitzplatzen vorhanden ist. Auerdem hat eine Area einen Namen (also Buhne etc.) und eine Liste mit Gasten. Naturlich darf die Groe der Liste nicht die Anzahl der Sitzplatze uberschreiten. Bar Entwickelt weiterhin eine Klasse Bar, die jeweils die drei oben genannten Bereiche beinhaltet. Beim Erstellen eines Objektes der Klasse Bar (also im Konstruktor) wird ubergeben, welchem Bereich wie viele Sitzplatze zugesichert werden. Diese Anzahl kann sich nach dem Konstruktoraufruf nicht mehr verandern (Begrundet hier eure Vorgehensweise). Zusatzlich ist die Anzahl der Personen einer Kneipe beschrankt. Es kann nur so viele Gaste geben, wie es auch Sitzplatze gibt. Die maximale Anzahl der Kellner entspricht der Anzahl der Sitzplatze durch funf, mindestens jedoch 3. Live-Bands mit mehr als funf Musikern passen nicht auf die Buhne. Um eine gute Trennung zu ermoglichen, enthalt jede Bar zwei Listen. Zum Einen eine fur die Kellner, zum Anderen eine fur die Musiker. Person Jeder der eine Kneipe besucht (ob nun als Gast, Kellner oder Musiker) ist eine Person. Alle Personen haben einen Namen (welcher im Konstruktor ubergeben wird) und konnen eine Kneipe betreten und wieder verlassen (Methode enter(Bar bar) und leave()). Jede Person wei, in welcher Kneipe sie sich be ndet, hat also ein Attribut von Typ Bar. Ist eine Person in keiner Kneipe, so ist dieses Attribut = null. Weiterhin spezi ziert eine abstrakte Methode doSomething(). Diese wird von der konkreten Person (also dem Gast, dem Kellner etc.) implementiert und stellt eine Aktion innerhalb der Kneipe dar. Immer wenn etwas passiert (ein Gast bestellt z.B. ein Getrank), soll eine Ausgabe auf der Konsole erscheinen mit Namen der Person und der gerade ausgeubten Tatigkeit. Ziel ist es, am Ende anhand der Ausgaben nachvollziehen zu konnen, was in der Kneipe so passiert. Guest Ein Gast ist eine Person. Wenn er die Kneipe betritt, versucht er zunachst einen Platz bei der Buhne zu bekommen. Sind dort schon alle Sitzplatze belegt, so versucht er es weiter bei der Theke. Ist dort ebenfalls alles besetzt, so versucht er es bei der Tur. Ist gar kein Platz mehr frei, so muss der Gast leider drauen bleiben. Wurde ein freier Platz gefunden, so tragt sich der Gast in die Liste des jeweilig gewahlten Bereichs ein. Ein Gast kann, sofern er in einer Kneipe ist, sich entschlieen diese wieder zu verlassen (wird in der Methode doSomething() ausgefuhrt). Die Auswahl, ob er dies tut oder nicht, ndet zufallig statt. Zufallswerte lassen sich mit der Methode random der Klasse Math erzeugen (also Math.random()). Verlasst ein Gast eine Kneipe, so muss er aus der jeweiligen Liste entfernt werden Musician Ein Musiker ist eine Person. Er besitzt immer ein Instrument, welches im Konstruktor ubergeben wird. Beim Aufruf der Methode doSomething() gibt er an, welches Instrument er gerade spielt. Beim Betreten der Kneipe wird der Musiker in die Liste fur die Musiker eingetragen. Main Die Klasse Main erzeugt eine Kneipe und fullt diese mit Personen. Die Klasse Main erzeugt eine Kneipe und fullt diese mit Personen. Damit etwas in der Kneipe passieren kann, gibt es eine Schleife die fur jede Person doSomething() aufruft. Zur Umsetzung dieser Schleife sollten alle Referenzen der erzeugten Personen in dieser Klasse gespeichert sein. In der bereits vorgegebenen Klasse Main be ndet sich eine statische Methode waitFor(long millis). Diese Methode sorgt dafur, dass das Programm eine bestimmte Zeit wartet, bevor es weiter arbeitet (Angaben in Millisekunden). Verwendet diese Methode, um die Konsolenausgaben etwas zu verzogern. Aufgabe 2 Endlich gibt es was zu Trinken Drink Ein Getrank hat einen Namen, Kosten und einen Alkoholgehalt. Entwickelt hierfur eine Klasse Drink. Menu Die Karte unserer Kneipe enthalt nur Getranke. Gebt einige Getranke vor und bietet sie als statische Attribute der Klasse Menu an. Waiter Ein Kellner ist eine Person. Wie bereits erwahnt, kann ein Kellner eine Bestellung entgegen nehmen und diese bearbeiten (vgl. Punkt Bestellung). Die Methode doSomething hat keinen Eekt bei einem Kellner. Kellner tragen sich beim Betreten der Bar in die entsprechende Liste fur Kellner ein. Bestellungen Damit nun Gaste auch Getranke bestellen konnen, erweitert die Klasse Bar um eine Methode order(Drink drink, Guest guest). Wird diese Methode durch einen Gast aufgerufen, (dies soll ebenfalls zufallig in doSomething() passieren, bei dem Getrank handelt es sich um ein Getrank aus der Klasse Menu) wird ein zufalliger Kellner ausgesucht und diese Bestellung an ihn weitergeleitet (serve(Drink drink, Guest guest)). Damit der Kellner dem Gast das Getrank auch bringen kann, erweitert die Klasse Guest um die Methode give(Drink drink). Wird diese Methode aufgerufen, so konsumiert der Gast das Getrank. Je mehr alkoholische Getranke ein Gast trinkt, desto hoher wird sein Alkoholpegel. Damit die Kneipe auch Gewinn machen kann, erhalt die Klasse Bar ein weiteres Attribut cashBox. Nachdem der Kellner nun also dem Gast sein Getrank gebracht hat, legt er das Geld fur dieses Getrank in die Kasse. Der Einfachheit halber gehen wir davon aus, dass ein Gast unendlich viel Geld bei sich hat. 2 PI 1, WiSe 2011/2012 Aufgabe 3 Manche Gaste sind eben anders als Andere (15%) VIP Ein VIP ist ein Gast. Der VIP ist in der Lage andere Gaste von ihren Platzen zu " vertreiben\, sofern kein freier Platz mehr vorhanden ist. Dazu wahlt er einen zufalligen Gast aus der Liste der jeweiligen Area und verdrangt diesen anschlieend. Um dies zu realisieren benotigt die Klasse Gast eine Methode kick(). Gaste suchen sich anschlieend einen freien Platz auf der nachsten Area (also z.B. bei der Theke) und setzten sich dort hin. Ist nichts mehr frei, so verlasst der Gast die Kneipe. Handelt es sich bei dem " vertriebenen\ Gast wiederum um einen VIP, so geht dieser in den nachsten Bereich und vertreibt dort ggf. einen anderen Gast. Wird ein VIP aus dem Bereich Tur vertrieben, so verlasst er, genau wie ein normaler Gast, die Kneipe. Wie konnte man verhindern, dass ein VIP andere VIPs vertreibt? Roughneck In jeder Kneipe gibt es schwarze Schafe. Einige der Gaste werden daher unangenehm, wenn sie zu viel Alkohol getrunken haben. Jedoch reagieren die Personalkrafte stets rechtzeitig. Wenn ein Raufbold genugend Alkohol getrunken hat, wirft er einen Stuhl um (oder vlt. sogar durch die Gegend) und wird von einer zufalligen Personalkraft aus der Kneipe entfernt. Dazu erweitert die Klasse Bar um die Methode throwChair(Roughneck roughneck) und die Klasse Waiter um die Methode kickRoughneck(Roughneck roughneck). Raufbolde sind wahre Trinker. Sie bestellen viel hau ger als normale Gaste neue Getranke. Testen Testet eure Implementierung, indem ihr einen Durchgang protokolliert und an einigen Punkten beschreibt, warum eine bestimmte Ausgabe erschienen ist. Hinweis Im Anhang zu dieser Aufgabe ndet ihr ein UML-Klassendiagramm, welches zur Ubersicht der Klassenstruktur verwendet werden kann. Es legt keinen Wert auf Vollstandigkeit und absoluter Korrektheit. Sinnvolle Erweiterungen sind daher vorstellbar. 3 |
||||||||||||||||||||||
07.12.2011, 18:00 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Hallo, ich nochmal! Ich poste mal meine bisherigen Ideen. Wenn sich jemand die Mühe machen würde, sie anzusehen und sie mit der oben geposteten Aufgabenformulierung zu vergleichen, würde ich mich riesig freuen, da ich wirklich kein Experte in diesen Dingen bin, mir aber immerhin Mühe gebe. (Die Werbung sagt: Mühe allein reicht nicht... ) Hier meine Idee zur Klasse Area:
Weiter geht es dann mit meiner Idee zur Klasse Bar (knüpft an den Code oben an):
Weiter geht's mit meiner Idee zur Klasse Person:
Bishierhin bin ich mir ja wenigstens noch einigermaßen sicher, jetzt wirds heikel. Meine Idee zur Klasse Guest:
Das schmerzt wahrscheinlich im Auge eines Programmierers, aber ich weiß es leider nicht besser! Das sind meine bisherigen Ideen. Ich hoffe sehr auf Hilfe. |
||||||||||||||||||||||
07.12.2011, 18:22 | tigerbine | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Die gleiche Aufgabe hier einzustellen, ob komplett oder in Happen, das ist ein Crossposting. Wir haben dir auch schon mehrfach gesagt, dass wir diese nicht dulden. Es gehört sich einfach nicht, mehrere Leute mit seinem Problem zu beschäftigen. Leute helfen dir hier, weil sie auch denken, dass es bislang noch keiner getan hat. Ebenso wurdest du darauf hingewiesen, dass diese Fragen ins www.informatikerboard.de gehören. Helfer, die sich auskennen lade ich herzlich ein sich auch dort zu registrieren und zu helfen. Aus Respekt vor den Helfern in diesem Thread lasse ich ihn offen. Die nächste Anfrage wird jedoch mit dem entsprechenden Hinweis geschlossen. Danke. |
||||||||||||||||||||||
07.12.2011, 18:42 | Gast11022013 | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Ja, okay. Vielleicht hilft trotzdem jemand, wo ichs doch jetzt alles gepostet habe. Nächstes Mal halte ich mich dran. |
||||||||||||||||||||||
08.12.2011, 23:46 | Harper | Auf diesen Beitrag antworten » | ||||||||||||||||||||
Habt ihr zu der aufgabe noch ein Programmgerüst? Wenn ja würde das den aufbau erheblich vereinfachen... wenn nicht und du das heute noch liest wäre cool, hab heut abend eh noch etwas zeit dann würde ichs mir mal genauer anschauen... Ich finde btw nicht das man hier eine Arraylist braucht, ein Array funktioniert hier genauso aber Arraylist is sicherlich nich falsch //edit: dein boolean "untergekommen" in der klasse guest ist (zumindest soweit ichs beim überfliegen gesehn hab) nicht bekannt, da sollte dir aber eclipse/netbeans schon meckern |
|