Hallo, folgende (leider etwas längliche) Aufgabe ist gestellt:
In den folgenden Aufgaben geht es darum, das Nachtleben einer Kneipe zu simulieren. Wie
bei einer echten Kneipe können Gäste eine Kneipe betreten, verlassen, Getränke bestellen etc.
Natürlich sind nicht alle Gäste gleich, einige von ihnen können sich bei erhöhtem Alkoholkonsum
nicht benehmen und werden aus der Kneipe geworfen. Andere Gäste wiederum sind berühmt und
werden als VIP's behandelt. Neben Gästen gibt es aber auch Kellner, welche die Gäste bedienen.
Und was darf jeder Kneipe nicht fehlen? Genau: eine Live-Band. Diese ist also ebenfalls in der
Kneipe vertreten.
Aufgabe 1
Area
Alle Kneipen sind gleich aufgebaut. Es gibt eine Bühne, eine Theke und eine Tür.
Natürlich sind einige Pläatze begehrter als andere. Gäste bevorzugen die Bühne, mit der Theke
geben sie sich auch noch zufrieden. Am unbeliebtesten ist der Bereich um die Tür.
Schreibt eine Klasse Area, die solch einen Bereich darstellt. Jeder Bereich zeichnet sich dadurch
aus, dass eine bestimmte Anzahl an Sitzplätzen vorhanden ist. Außerdem hat eine Area
einen Namen (also Bühne etc.) und eine Liste mit Gästen. Natürlich darf die Größe der Liste
nicht die Anzahl der Sitzplätze überschreiten.
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 übergeben,
welchem Bereich wie viele Sitzplätze zugesichert werden. Diese Anzahl kann sich nach dem Konstruktoraufruf
nicht mehr verändern (Begründet hier eure Vorgehensweise). Zusatzlich ist die
Anzahl der Personen einer Kneipe beschränkt. Es kann nur so viele Gäste geben, wie es auch
Sitzplätze gibt. Die maximale Anzahl der Kellner entspricht der Anzahl der Sitzplätze durch
fünf, mindestens jedoch 3. Live-Bands mit mehr als fünf Musikern passen nicht auf die Bühne.
Um eine gute Trennung zu ermöglichen, enthalt jede Bar zwei Listen. Zum Einen eine für 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 übergeben wird) und können eine
Kneipe betreten und wieder verlassen (Methode enter(Bar bar) und leave()). Jede Person weiß,
in welcher Kneipe sie sich befindet, hat also ein Attribut von Typ Bar. Ist eine Person in keiner
Kneipe, so ist dieses Attribut = null. Weiterhin spezifiziert 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 Getränk), soll eine Ausgabe auf der Konsole
erscheinen mit Namen der Person und der gerade ausgeübten Tätigkeit.
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 zunächst einen Platz
bei der Bühne zu bekommen. Sind dort schon alle Sitzplätze belegt, so versucht er es weiter bei
der Theke. Ist dort ebenfalls alles besetzt, so versucht er es bei der Tür. Ist gar kein Platz mehr
frei, so muss der Gast leider draußen bleiben. Wurde ein freier Platz gefunden, so trägt sich der
Gast in die Liste des jeweilig gewählten Bereichs ein. Ein Gast kann, sofern er in einer Kneipe ist,
sich entschließen diese wieder zu verlassen (wird in der Methode doSomething() ausgeführt). Die
Auswahl, ob er dies tut oder nicht, findet zufällig statt. Zufallswerte lassen sich mit der Methode
random der Klasse Math erzeugen (also Math.random()). Verläasst 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
übergeben wird. Beim Aufruf der Methode doSomething() gibt er an, welches Instrument er
gerade spielt. Beim Betreten der Kneipe wird der Musiker in die Liste für die Musiker eingetragen.
Main
Die Klasse Main erzeugt eine Kneipe und füllt diese mit Personen. Damit etwas in der Kneipe passieren kann,
gibt es eine Schleife, die für 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 befindet sich eine statische Methode waitFor(long millis).
Diese Methode sorgt dafür, dass das Programm eine bestimmte Zeit wartet, bevor es weiter
arbeitet (Angaben in Millisekunden). Verwendet diese Methode, um die Konsolenausgaben etwas
zu verzögern.
Aufgabe 2 sowie Aufgabe 3 lasse ich erstmal weg. Ich denke, wenn ich Aufgabe 1 hinbekommen habe, bekomme ich auch den Rest hin.
Hier sind meine bisherigen Ideen, die sicherlich alles andere als gut sind.
Im Moment weiß ich jedoch nichts Besseres und lasse mir hier lieber helfen!
Meine Idee zur Klasse Area:
Meine Idee zur Klasse Bar:
Meine Idee zur Klasse Person:
Meine (fragwürdige) Idee zur Klasse Guest:
Könnt ihr mir bitte helfen?
Komme so nicht weiter...
Dankeschön!
In den folgenden Aufgaben geht es darum, das Nachtleben einer Kneipe zu simulieren. Wie
bei einer echten Kneipe können Gäste eine Kneipe betreten, verlassen, Getränke bestellen etc.
Natürlich sind nicht alle Gäste gleich, einige von ihnen können sich bei erhöhtem Alkoholkonsum
nicht benehmen und werden aus der Kneipe geworfen. Andere Gäste wiederum sind berühmt und
werden als VIP's behandelt. Neben Gästen gibt es aber auch Kellner, welche die Gäste bedienen.
Und was darf jeder Kneipe nicht fehlen? Genau: eine Live-Band. Diese ist also ebenfalls in der
Kneipe vertreten.
Aufgabe 1
Area
Alle Kneipen sind gleich aufgebaut. Es gibt eine Bühne, eine Theke und eine Tür.
Natürlich sind einige Pläatze begehrter als andere. Gäste bevorzugen die Bühne, mit der Theke
geben sie sich auch noch zufrieden. Am unbeliebtesten ist der Bereich um die Tür.
Schreibt eine Klasse Area, die solch einen Bereich darstellt. Jeder Bereich zeichnet sich dadurch
aus, dass eine bestimmte Anzahl an Sitzplätzen vorhanden ist. Außerdem hat eine Area
einen Namen (also Bühne etc.) und eine Liste mit Gästen. Natürlich darf die Größe der Liste
nicht die Anzahl der Sitzplätze überschreiten.
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 übergeben,
welchem Bereich wie viele Sitzplätze zugesichert werden. Diese Anzahl kann sich nach dem Konstruktoraufruf
nicht mehr verändern (Begründet hier eure Vorgehensweise). Zusatzlich ist die
Anzahl der Personen einer Kneipe beschränkt. Es kann nur so viele Gäste geben, wie es auch
Sitzplätze gibt. Die maximale Anzahl der Kellner entspricht der Anzahl der Sitzplätze durch
fünf, mindestens jedoch 3. Live-Bands mit mehr als fünf Musikern passen nicht auf die Bühne.
Um eine gute Trennung zu ermöglichen, enthalt jede Bar zwei Listen. Zum Einen eine für 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 übergeben wird) und können eine
Kneipe betreten und wieder verlassen (Methode enter(Bar bar) und leave()). Jede Person weiß,
in welcher Kneipe sie sich befindet, hat also ein Attribut von Typ Bar. Ist eine Person in keiner
Kneipe, so ist dieses Attribut = null. Weiterhin spezifiziert 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 Getränk), soll eine Ausgabe auf der Konsole
erscheinen mit Namen der Person und der gerade ausgeübten Tätigkeit.
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 zunächst einen Platz
bei der Bühne zu bekommen. Sind dort schon alle Sitzplätze belegt, so versucht er es weiter bei
der Theke. Ist dort ebenfalls alles besetzt, so versucht er es bei der Tür. Ist gar kein Platz mehr
frei, so muss der Gast leider draußen bleiben. Wurde ein freier Platz gefunden, so trägt sich der
Gast in die Liste des jeweilig gewählten Bereichs ein. Ein Gast kann, sofern er in einer Kneipe ist,
sich entschließen diese wieder zu verlassen (wird in der Methode doSomething() ausgeführt). Die
Auswahl, ob er dies tut oder nicht, findet zufällig statt. Zufallswerte lassen sich mit der Methode
random der Klasse Math erzeugen (also Math.random()). Verläasst 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
übergeben wird. Beim Aufruf der Methode doSomething() gibt er an, welches Instrument er
gerade spielt. Beim Betreten der Kneipe wird der Musiker in die Liste für die Musiker eingetragen.
Main
Die Klasse Main erzeugt eine Kneipe und füllt diese mit Personen. Damit etwas in der Kneipe passieren kann,
gibt es eine Schleife, die für 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 befindet sich eine statische Methode waitFor(long millis).
Diese Methode sorgt dafür, dass das Programm eine bestimmte Zeit wartet, bevor es weiter
arbeitet (Angaben in Millisekunden). Verwendet diese Methode, um die Konsolenausgaben etwas
zu verzögern.
Aufgabe 2 sowie Aufgabe 3 lasse ich erstmal weg. Ich denke, wenn ich Aufgabe 1 hinbekommen habe, bekomme ich auch den Rest hin.
Hier sind meine bisherigen Ideen, die sicherlich alles andere als gut sind.
Im Moment weiß ich jedoch nichts Besseres und lasse mir hier lieber helfen!
Meine Idee zur Klasse Area:
Code:
import java.util.List;
import java.util.ArrayList;
public class Area{
int size;
String name;
List<Guest> guests= new ArrayList<Guest>;
// Konstruktor, den ich glaube ich, für die Klasse Bar brauche
public Area(int size){
this.size=size;
}
//Methoden, die man glaube ich später für die Klasse Guest braucht
public boolean addGuest(Guest g){
boolean untergekommen=false;
if(guests.size()<size){
guests.add(g);
untergekommen=true;
}
return untergekommen;
}
public void deleteGuest(Guest g){
guests.remove(g);
}
}
Meine Idee zur Klasse Bar:
Code:
public class Bar{
Area Stage;
Area Counter;
Area Door;
List<Waiter> waiter=new ArrayList<Waiter>;
List<Musician> musicians=new ArrayList<Musician>;
int maximumNumberOfWaiter;
int maximumNumberOfMusicians;
double cashBox;
public Bar(int sizeOfStage, int sizeOfCounter, int sizeOfDoor){
Stage= new Area(sizeOfStage);
Counter= new Area(sizeOfCounter);
Door= new Area(sizeOfDoor);
}
public void addWaiter(Waiter w){
if( (waiter.size()<3) || (3<=waiter.size()<(sizeOfStage+sizeOfCounter+sizeOfDoor)/5) )
{
waiter.add(w);
}
public void deleteWaiter(Waiter w){
waiter.remove(w);
}
public void addMusician(Musician m){
if(musicians.size()<5){
musicians.add(m);}
public void deleteMusician(Musician m){
musicians.remove(m);
}
}
Meine Idee zur Klasse Person:
Code:
public class Person{
String name;
Bar bar=0;
public Person(String name){
this.name=name;
}
public void enter(Bar bar){
this.bar=bar;
}
public void leave(){
bar=0;
}
abstract public void doSomething();
}
Meine (fragwürdige) Idee zur Klasse Guest:
Code:
public class Guest extends Person{
Area area;
public void doSomething(){
enter(bar);
Stage.addGuest(name);
if(untergekommen==false){
Counter.addGuest(name)}
if(untergekommen==false){
Door.addGuest(name)}
if(untergekommen==false){
leave();}
}
double a=Math.random();
if(a<0.5){
leave();
}
}
Könnt ihr mir bitte helfen?
Komme so nicht weiter...
Dankeschön!
Zuletzt bearbeitet von einem Moderator: