Klassen Modellierung einer Kneipe

bERt0r

Top Contributor
Ich möchte dich mal sehen wenn dein Zahnarzt zu dir sagt, "Sie hatten ja gesunde Zähne, aber ich hab mal rumgebohrt. Mir war danach, ich hab das einfach mal gemacht."

Der Musiker wird genau dann in die Liste eingetragen, wenn noch platz ist.
Wenn doSomething für den Musiker aufgerufen wird, soll ausgegeben werden "Der Musiker <Name des Musikers> spielt auf seinem Instrument, dem <Instrument des Musikers>."
Sieh mal zu dass du das hinkriegst und lass die Musiker nüchtern bleiben wenn sie das wollen (wers glaubt :D)
 

babuschka

Top Contributor
Der Musiker wird genau dann in die Liste eingetragen, wenn noch platz ist.

Aber das habe ich doch gemacht? ???:L

Ich verstehe Dich nicht...

Ich habe nur noch die boolean-Variable darfmusizieren dazu genommen, damit man bei leave() wieder unterscheiden kann, ob er einfach nur die Bar verlässt (wenn er gar nicht in die Liste kommt) oder auch noch aus der Liste der Msuiker ausgetragen werden muss.



Wenn doSomething für den Musiker aufgerufen wird, soll ausgegeben werden "Der Musiker <Name des Musikers> spielt auf seinem Instrument, dem <Instrument des Musikers>."

Meinst Du:

Java:
public void doSomething(){
double b=Math.random();
 
System.out.println("Der Musiker " + name " spielt gerade " + instrument);

if(b<0.5){
  leave();
}

}
 
Zuletzt bearbeitet von einem Moderator:

bERt0r

Top Contributor
if(bar.getSizeOfListOfMusician()<5) sieht übrigens rightig aus
Ein letztes mal: Ein Musiker soll die Bar nicht verlassen wenn doSomthing aufgerufen wird.
Wenn bei einem Musiker leave aufgerufen wird muss er IMMER von der Liste entfernt werden. Deswegen ja die überprüfung beim betreten der bar. Du kannst ja eine Annahme machen, dass ein Musiker der nicht mehr auf die Bühne passt die Bar wieder verlässt. Das kann man aus "Live-Bands mit mehr als fünf Musikern passen nicht auf die Bühne." Nicht wirklich gut schließen. Aber überleg mal, was macht ein Musiker in einer Bar in der er nicht spielen darf? Wenn er sich betrinkt, ist er kein Musiker mehr sondern ein Gast. Darum musst du dich bei deiner Aufgabe nicht kümmern. Für dich ist klar, der Musiker kann NUR musizieren, die bar betreten, verlassen sonst nix.
Wenn der Musiker keinen Platz findet, betritt er die bar gar nicht, er sollte in der enter() funktion schon wieder rausfliegen.
 

babuschka

Top Contributor
So? :)

Java:
// Die Klasse Musician (Aufgabe 1)
 
public class Musician extends Person{
 
String instrument;

 
public Musician(String name, String instrument){
super(name);
this.instrument=instrument;
}
 
public void enter(Bar bar){
 
this.bar=bar;
// Neue Methode in der Klasse Bar: getSizeOfListOfMusician();
//Sieht so aus:
// public int getSizeOfListOfMusician(){
//         return musician.size();
// }  
 
if(bar.getSizeOfListOfMusician()<5){
   bar.FuegeMusikerHinzu(this);
   }
else bar=null;
 
}
 
public void leave(){
bar=null;
 
bar.EntferneMusiker(this);
}
 

 public void doSomething(){

System.out.println("Der Musiker " + name " spielt gerade " + instrument); 

}


Zeile 38 ist falsch: Wie macht man das mit dem System.out.println hier?
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
Eine Nachfrage noch hierzu, bevor ich zur Klasse Main komme.


Irgendwie habe ich das doch jetzt bei Guest so gemacht:

Potentieller Gast betritt die Bar.
Er schaut, ob bei der Bühne ein Platz frei ist.
Wenn ja, trägt er sich dort ein.
Wenn nein, schaut er, ob bei der Theke ein Platz frei ist.
Wenn ja, trägt er sich dort ein.
Wenn nein, schaut er, ob bei der Tür ein Platz frei ist.
Wenn ja, trägt er sich dort ein.
Wenn nein, verlässt er die Kneipe wieder.

Ein Gast kann die Bar aber auch verlassen, nachdem er sich bereits irgendwo eingetragen hatte.
(Hier hat man also sozusagen zwei "verschiedene" Arten von leave() (die aber beide in einer Methode umgesetzt sind).


Bei einem Musiker ist das jetzt anders? Ich sehe nicht, warum!

Er kommt in die Bar, schaut, ob auf der Musikerliste ein Platz ist.
Wenn ja, trägt er sich ein.
Wenn nicht, geht er wieder.

Auch der Musiker kann die Bar verlassen, nachdem er sich eingetragen hatte.




Ich verstehe also nicht, inwiefern die Methode enter bei Musician so viel einfacher sein kann!
Entweder bin ich schwer von Begriff oder man könnte die Methode enter bzw. leave bei Guest auch viel einfacher machen.
 

babuschka

Top Contributor
Mag sein, dass wir aneinander vorbeireden.

Aber sowohl Gast als auch Musiker können doch entweder SOFORT wieder gehen oder aber sich erst eintragen und DANN gehen.


Da sehe ich keinen Unterschied.

Naja, egal.
 

babuschka

Top Contributor
Unter diesen Gesichtspunkten war ich auf diesen Code gekommen.
Deswegen habe ich da die boolean-Variable darfmusizieren (im Sinne von: Er konnte sich in die Musiker-Liste eintragen und darf also musizieren) eingeführt, damit ich unterscheiden kann, ob der Musiker in einer Liste steht (und er dann weggeht) oder ob er weggeht ohne überhaupt in einer Liste eingetragen worden zu sein.

Würdest Du sagen, dass der Code dann okay ist?


Java:
// Die Klasse Musician (Aufgabe 1)

public class Musician extends Person{

String instrument;
boolean darfmusizieren=false;

public Musician(String name, String instrument){
super(name);
this.instrument=instrument;
}

public void enter(Bar bar){

this.bar=bar;
// Neue Methode in der Klasse Bar: getSizeOfListOfMusician();
//Sieht so aus:
// public int getSizeOfListOfMusician(){
//         return musician.size();
// }  

if(bar.getSizeOfListOfMusician()<5){
   bar.FuegeMusikerHinzu(this);
   darfmusizieren=true;
}
else leave();

}

public void leave(){
bar=null;

if(darfmusizieren=true){
bar.EntferneMusiker(this);
}

}


public void doSomething(){

System.out.println("Der Musiker" + name + " spielt gerade" + instrument); 
 
}
 }
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
Vielleicht können wir jetzt zur Klasse Main kommen?

(Das Andere ist wohl einfach Auslegungssache.)


Die Klasse Main ist vorgegeben:

Java:
public class Main {

	/**
	 * This is a short example using the waitFor method.
	 */
	public static void main(String[] args) {
		waitFor(1000); // sleep 1 second
		System.out.println("first line");
		waitFor(1000);
		System.out.println("second line");
		waitFor(500); // sleep 0.5 seconds
	}


	/**
	 * Stops the execution of the program for the specified time.
	 * @param millis The amount of milliseconds to stop.
	 */
	public static void waitFor(long millis) {
		try {
			Thread.sleep(millis);
		} catch(Exception e) {
			// ignore here
		}
	}

}

und soll Folgendes (in Worten) machen:

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.




Um ehrlich zu sein: Ich verstehe nur Bahnhof.

Die Klasse Main soll irgendwie ergänzt werden, so viel verstehe ich noch.
 

discipulo

Mitglied
Java:
public class Main {
 
    public static void main(String[] args) {
        Bar myBar= new Bar(10,20,30);
        Waiter james = new Water(...);
        Musican wolle = new Musican(...);
        Guest gast1 = new Gast(...);
        myBar.addWaiter(james);
        myBar.addMusican(wolle);
        gast1.enter(myBar);
        waitFor(1000); // sleep 1 second
        System.out.println("first line");
        waitFor(1000);
        System.out.println("second line");
        waitFor(500); // sleep 0.5 seconds
    }
 
 
    /**
     * Stops the execution of the program for the specified time.
     * @param millis The amount of milliseconds to stop.
     */
    public static void waitFor(long millis) {
        try {
            Thread.sleep(millis);
        } catch(Exception e) {
            // ignore here
        }
    }

In den Klammer die Parameter der Konstruktoren ausführen. Hab ich jetzt nicht gemacht, weil ich so nicht wusste wo was steht. Das ist erst einmal die Intialisierung.
 

babuschka

Top Contributor
Okay, ich erzeuge also eine neue Bar, dabei muss ich die Größen der Bereiche übergeben (so war ja der Konstruktor der Klasse Bar geschrieben worden.

Dann erzeuge ich einen Gast, einen Kellner, einen Musiker.

Dann muss ich dafür sorgen, daß für jede Person doSomething() ausgeführt wird.

(Das wird eine each-for Schleife sein, vermute ich.)


Aber was soll das mit der Verzögerung?

Muss ich da, wo jetzt "first line" und "second line" steht irgendwas eintragen?
 

discipulo

Mitglied
Okay, ich erzeuge also eine neue Bar, dabei muss ich die Größen der Bereiche übergeben (so war ja der Konstruktor der Klasse Bar geschrieben worden.

Dann erzeuge ich einen Gast, einen Kellner, einen Musiker.

Dann muss ich dafür sorgen, daß für jede Person doSomething() ausgeführt wird.

(Das wird eine each-for Schleife sein, vermute ich.)


Aber was soll das mit der Verzögerung?

Muss ich da, wo jetzt "first line" und "second line" steht irgendwas eintragen?

for Schleife geht nur wenn du die Personen in einem Array anlegst dann kannst du sagen
for(....)
so müsste man jetzt schreiben
Guest.doSomething();
Waiter.doSomething();
.....
 

babuschka

Top Contributor
Ich meine die each-for Schleife.

Nicht die klassische for-Schleife.


Also

Java:
for (Elementyp element: sammlung){
      Schleifenrumpf
}

Pseudocode:

für jedes element in sammlung tue:{
Schleifenrumpf
}


Damit müsste ich doch für alle Gäste in der ArrayList doSomething aufrufen können?
(Und ebenso für alle Kellner und Gäste in ihren Listen..)


Was passiert aber, nachdem ich doSomething aufgerufen habe?

Es soll ja auch irgendwas ausgegeben werden?
Und das vielleicht verzögert, um zu simulieren, dass die Dinge in der Kneipge nicht sofort hintereinander passieren müssen?




Dort, wo jetzt "first line" steht, soll sicherlich der Name der Person stehen, die gerade etwas getan hat.

Und dort, wo "second line" steht, soll bestimmt das stehen, was die betreffende Person gerade gemacht hat.


Und die Ausgabe soll man verzögern, wieso auch immer. :)
 
Zuletzt bearbeitet von einem Moderator:

discipulo

Mitglied
Ja sicherlich soll da noch irgendwas gemacht werden und ausgegeben werden.
Zum Beispiel das irgend nen Gast für irgendetwas vom Menü Geld bezahlt hat oder so..
 

babuschka

Top Contributor
Also ich denk mal, nachdem man für jede Person doSomething() hat ausführen lassen, muss man eben den Namen der Person und die Aktivität dieser Person ausgeben lassen.


Wenn ich also zum Beispiel den Gast Dennis nehme...
Und für diesen Gast doSomething() ausführe...
Stehen ja nur bestimmte Dinge zur Verfügung, die dieser Gast machen kann.

Bis jetzt habe ich nur die Möglichkeit, dass der Gast (eventuell) die Bar verlässt.
Angenommen, der Gast hat noch die Möglichkeit ein Getränk zu bestellen.

Könnte ich nicht - nach der Ausführung von doSomething() für Dennis - eine if-else-Bedingung für die Aktivitäten machen? Und dann diese Aktivität ausgeben?


Vielleicht irgendwie sowas:

doSomething für Dennis ausführen
if(Aktivität==leave()){
System.out.print("Dennis");
Verzögerung
System.out.println("Verlässt Bar");
else(Aktivität==GetränkBestellen());
System.out.print("Dennis")
Verzögerung
System.out.println("Bestellt Getränk")


Oder so ähnlich?
 

babuschka

Top Contributor
Ich habe jetzt Folgendes zur Klasse Main:

Dabei ist anzumerken, dass ich bei der Methode doSomething() von Guest ergänzt habe, dass ausgegeben wird: "verlässt Bar".
Bei der Klasse Musician habe ich in der doSomething Methode, dass ausgegeben wird:
"spielt gerade..."


Java:
public class Main {
	
	public static void main(String[] args) {
	Bar bar1=new Bar(45,20,50);
	Guest Dennis=new Guest("Dennis");
	Guest Philipp=new Guest("Philipp");
	Guest Michael=new Guest("Michael");
	Waiter Peter=new Waiter("Peter");
	Waiter Klaus=new Waiter("Klaus");
	Musician Thomas=new Musician("Thomas", "Gitarre");
	Musician Wolfgang=new Musician("Wolfgang", "Klavier");
	bar1.FuegeMusikerHinzu(Thomas);
	bar1.FuegeMusikerHinzu(Wolfgang);
	bar1.FuegeKellnerHinzu(Peter);
	bar1.FuegeKellnerHinzu(Klaus);
	
	
	Dennis.enter(bar1);
	Philipp.enter(bar1);
	Michael.enter(bar1);
	
	Person[] personen=new Person[7];
	
	personen[0]=Dennis;
	personen[1]=Philipp;
	personen[2]=Michael;
	personen[3]=Thomas;
	personen[4]=Wolfgang;
	personen[5]=Peter;
	personen[6]=Klaus;
	
	
	
	for(int i=0; i<=6; i++){
		waitFor(1000);
		System.out.println("Die Person " + personen[i] + " macht gerade Folgendes:");
		waitFor(1000);
		System.out.println(personen[i].doSomething());
		waitFor(500);
		}
	

	}


	/**
	 * Stops the execution of the program for the specified time.
	 * @param millis The amount of milliseconds to stop.
	 */
	public static void waitFor(long millis) {
		try {
			Thread.sleep(millis);
		} catch(Exception e) {
			// ignore here
		}
	}

}

Es kommen Fehlermeldungen: s. Screenshot


Davon sind 7 Fehler wieder klar, weil ich die Klasse Waiter noch nicht habe.

Aber ich verstehe diesen Fehler nicht:

Code:
Main.java:38:




EDIT: Meine Idee ist folgende:

Ich ändere in der Klasse Person die abstrakte Klasse public void doSomething() in die abstrakte Klasse

public String doSomething() und dann gebe ich bei Guest und bei Musician mit return einen String zurück, der dann in der Main-Methode ausgegeben wird.


Geht sowas:

return "spielt gerade " + instrument;

??

Ist das dann "spielt gerade Geige", wenn instrument des Musikers Geige ist?
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
Habe das noch ein bisschen modifiziert:

Java:
public class Main {
	
	public static void main(String[] args) {
	Bar bar1=new Bar(45,20,50);
	Guest Dennis=new Guest("Dennis");
	Guest Philipp=new Guest("Philipp");
	Guest Michael=new Guest("Michael");
	Waiter Peter=new Waiter("Peter");
	Waiter Klaus=new Waiter("Klaus");
	Musician Thomas=new Musician("Thomas", "Gitarre");
	Musician Wolfgang=new Musician("Wolfgang", "Klavier");
	bar1.FuegeMusikerHinzu(Thomas);
	bar1.FuegeMusikerHinzu(Wolfgang);
	bar1.FuegeKellnerHinzu(Peter);
	bar1.FuegeKellnerHinzu(Klaus);
	
	
	Dennis.enter(bar1);
	Philipp.enter(bar1);
	Michael.enter(bar1);
	
	Person[] personen=new Person[7];
	
	personen[0]=Dennis;
	personen[1]=Philipp;
	personen[2]=Michael;
	personen[3]=Thomas;
	personen[4]=Wolfgang;
	personen[5]=Peter;
	personen[6]=Klaus;
	
	//toString() entsprechend in der Klassen Guest und Musician und Waiter überschrieben	
	
	for(int i=0; i<=6; i++){
		waitFor(1000);
		System.out.println("Die Person " + personen[i].toString() + " macht gerade Folgendes:");
		waitFor(1000);
		System.out.println(personen[i].doSomething());
		waitFor(500);
		}
	

	}


	/**
	 * Stops the execution of the program for the specified time.
	 * @param millis The amount of milliseconds to stop.
	 */
	public static void waitFor(long millis) {
		try {
			Thread.sleep(millis);
		} catch(Exception e) {
			// ignore here
		}
	}

}

Jetzt habe ich aber ein Problem.
In dem Fall, dass ein Gast bei Aufruf von doSomething() die Bar verlässt, habe ich eine NullPointerException: s. Screenshot ganz unten.


Hier nochmal (damit ihr mit dem Screenshot was anfangen könnt, Guest und Main:


Java:
// Die Klasse Guest (Aufgabe 1)

import java.util.List;
import java.util.ArrayList;

public class Guest extends Person{
	 
Area area=null;

public Guest(String name){
	super(name);
}


 
public void enter(Bar bar){
this.bar=bar;
 
if(bar.gibStage().nochFrei()){
   bar.gibStage().FuegeGastHinzu(this);
   area=bar.gibStage();
  }
 
else if (bar.gibCounter().nochFrei() && area==null){
   bar.gibCounter().FuegeGastHinzu(this);
   area=bar.gibCounter();
}
 
else if (bar.gibDoor().nochFrei() && area==null){
   bar.gibDoor().FuegeGastHinzu(this);
   area=bar.gibDoor();
}
 
else leave();
}
 
public void leave(){
  bar=null;
 
  if(area!=null){
        if(area==bar.gibStage()){
           bar.gibStage().EntferneGast(this);
           area=null;}
        else if (area==bar.gibCounter()){
           bar.gibCounter().EntferneGast(this);
           area=null;}
               else { bar.gibDoor().EntferneGast(this);
                        area=null;}
}
}

public String toString(){
	String x=name;
	return x;
}
 
public String doSomething(){
   double a=Math.random();
     if(a<0.5){
    leave();	 
    return "verlaesst Bar.";
    	 
    	 
      }
     return "-";
}
 
 
}

Java:
public class Main {
	
	public static void main(String[] args) {
	Bar bar1=new Bar(45,20,50);
	Guest Dennis=new Guest("Dennis");
	Guest Philipp=new Guest("Philipp");
	Guest Michael=new Guest("Michael");
	Waiter Peter=new Waiter("Peter");
	Waiter Klaus=new Waiter("Klaus");
	Musician Thomas=new Musician("Thomas", "Gitarre");
	Musician Wolfgang=new Musician("Wolfgang", "Klavier");
	bar1.FuegeMusikerHinzu(Thomas);
	bar1.FuegeMusikerHinzu(Wolfgang);
	bar1.FuegeKellnerHinzu(Peter);
	bar1.FuegeKellnerHinzu(Klaus);
	
	
	Dennis.enter(bar1);
	Philipp.enter(bar1);
	Michael.enter(bar1);
	
	Person[] personen=new Person[7];
	
	personen[0]=Dennis;
	personen[1]=Philipp;
	personen[2]=Michael;
	personen[3]=Thomas;
	personen[4]=Wolfgang;
	personen[5]=Peter;
	personen[6]=Klaus;
	
		
	
	for(int i=0; i<=6; i++){
		waitFor(1000);
		System.out.println("Die Person " + personen[i].toString() + " macht gerade Folgendes:");
		waitFor(1000);
		System.out.println(personen[i].doSomething());
		waitFor(500);
		}
	

	}


	/**
	 * Stops the execution of the program for the specified time.
	 * @param millis The amount of milliseconds to stop.
	 */
	public static void waitFor(long millis) {
		try {
			Thread.sleep(millis);
		} catch(Exception e) {
			// ignore here
		}
	}

}



Wer kann mir bitte helfen?
 
Zuletzt bearbeitet von einem Moderator:

discipulo

Mitglied
Java:
public void leave(){
  
 
  if(area!=null){
             if(area.equals(bar.gibStage())){
                          bar.gibStage().EntferneGast(this);
                          area=null;
               }
               else if (area.equals(bar.gibCounter())){
                          bar.gibCounter().EntferneGast(this);
                          area=null;
               }
               else if(area.equals(bar.gibDoor())){
                          bar.gibDoor().EntferneGast(this);
                          area=null;
               }
   } 
bar=null;
}
Zu beachten:
Bar nicht zu Anfang null setzen, denn wie soll er gucken ob die Areas gleich sind, wenn er gar nicht auf die Areas seiner bar zugreifen kann.
Und == sollte man nur für prmitive Datentypen wie int und boolean.
Strings sollte man ebenfalls mit compareTo oder equals(oder equalsIngnoreCase) vergleichen.
 

babuschka

Top Contributor
Jetzt geht es ohne den Fehler, danke!


Kannst Du mir aber bitte nochmal erklären, wieso ich

bar=null;

nicht an den Anfang schreiben darf? :reflect:
 

discipulo

Mitglied
Dein Gast kennt die bar1,
wenn dem entsprechend in der leave() Methode
bar=null; also deine Bar gleich null gesetzt wird
vergißt dein Gast praktisch die Bar.
Er kann die bar.getStage() auch nicht mehr fragen wie die Stage von der bar lautet.
Deshalb erst danach, denn dann kann der Gast noch bar.getStage(); ausführen denn er verwendet als Bar, die von dir in der Mainclass erstellte bar1. Der Gast führt sozusagen bar1.getStage() aus.

Wenn erst null gesetzt wird würde das ganze so aussehen:
bar=null
bar.getStage(); -> Gast kennt gar keine Bar mehr null.getStage() --> NullPointer...
 

babuschka

Top Contributor
Aufgabe 1 ist damit erledigt.

Jetzt versuche ich gerade Aufgabe 2, da hakt es schon wieder.


Meine bisherigen Ideen:

Ergänze in der Klasse Bar:

Java:
// Liefert ganzzahlige Zufallszahlen zwischen min (inklusive) und max (inklusive), also aus [min, max].
	
	public static int zufallszahlen(int min, int max) {   
		    max++;   
		    return (int) (Math.random() * (max - min) + min);   
		} 
	
	
	public void order(Drink drink, Guest guest){
		int c;
		c=zufallszahlen(0, getSizeOfListOfWaiter()-1);
		waiter.get(c).serve(drink, guest);
	}

Ergänze in der Klasse Guest:

Java:
public void give(Drink drink){
	alcoholLevel=alcoholLevel+drink.getAlcoholLevel();
}

...

public String doSomething(){
   double a=Math.random();
   
     if(a<0.5){
    leave();	 
    return "verlaesst Bar.";
    	 
   }
     
    if(a>=0.5){
    	bar.order(Menu.cola, this);
    	
    return "bestellt Getraenk";	
    }
     return "-";
     
}
 
 
}


Ergänze in der Methode Waiter:

Java:
public void serve(Drink drink, Guest guest){
	
}

Außerdem die Klasse Drink:

Java:
public class Drink{
	
	String name;
	double cost;
	double alcoholLevel;
	
	public Drink(String name, double cost, double alcoholLevel){
		this.name=name;
		this.cost=cost;
		this.alcoholLevel=alcoholLevel;
	}
	
	
	public double getAlcoholLevel(){
		return alcoholLevel;
	}
}

und die Klasse Menu:

Java:
public class Menu{
	
	static Drink cola=new Drink("cola", 2, 0);
	static Drink bier=new Drink("bier", 3, 7);
	static Drink wasser=new Drink("wasser", 1, 0);
	static Drink rum=new Drink("rum", 5, 12);
	
	
	
	
	
}


Vielleicht helft ihr mir ja auch bei Aufgabe 2.

Es klappt zwar irgendwie, aber bisher habe ich nur realisiert, dass bei einem der drei Gäste meiner Bar "bestellt ein Getränk" ausgegeben werden kann.

Aber soll man nicht auch ausgeben welches Getränk und dass der Gast bezahlt?
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
Fehler erscheinen da keine!

Aber ich bin damit nicht zufrieden, einfach nur auszugeben: "bestellt Getränk".


Wozu die Methode serve bei Waiter, wozu die verschiedenen Getränke in Menu:

Man soll doch bestimmt auch ausgeben: welches Getränk und dass bezahlt wird und welcher zufällig ausgewählte Kellner bedient??!???:L
 

babuschka

Top Contributor
Ich weiß aber nicht, wie ich das Getränk zufällig auswählen kann und an den Preis und den zufällig ausgewählten Kellner komme!

Die Methode serve ist doch so auch nicht vollständig...
 

discipulo

Mitglied
Dann nimmst du für die Getränke die Datenstruktur: Array,Liste oder ArrayList oder sowas in der Richtung.
Dann kannst du mit Random eine Ganzzahligezufallszahl ermitteln und dann genau das Getränk aus der Liste bestellen. Wenn du essen gehst, sagst du dem Keller doch auch ich hätte gerne die Nummer 67 oder soetwas in der Richtung
 

babuschka

Top Contributor
Das habe ich ja versucht:

Java:
public class Menu{
	
	static Drink cola=new Drink("cola", 2, 0);
	static Drink bier=new Drink("bier", 3, 7);
	static Drink wasser=new Drink("wasser", 1, 0);
	static Drink rum=new Drink("rum", 5, 12);
	
	Drink[] getraenke=new Drink[4];
	
	getraenke[0]=cola;
	getraenke[1]=bier;
	getraenke[2]=wasser;
	getraenke[3]=rum;
	
	
	
}

Und dann:

Java:
public String doSomething(){
   double a=Math.random();
   
     if(a<0.5){
    leave();	 
    return "verlaesst Bar.";
    	 
   }
     
    if(a>=0.5){
    	
    	int b=bar.zufallszahlen(0, 3);
    	bar.order(Menu.getraenke[b], this);
    	
    return "bestellt Getraenk";	
    }
     return "-";
     
}

Es kommt aber folgende Fehlermeldung: s. Screenshot
 

babuschka

Top Contributor
Okay, habe es jetzt hinbekommen, dass das bestellte Getränk angezeigt wird.

Jetzt versuche ich noch anzuzeigen, welcher zufällig ausgewählte Kellner das Getränk bringt und dass der Gast das Getränk dann trinkt.
 

bERt0r

Top Contributor
Naja, die Getränke auf der Menükarte static zu machen finde ich ganz in Ordnung. Man kann argumentieren, dass diese sich eben nicht ändern und gleich Konstanten (static final) sein können.
 

babuschka

Top Contributor
Ich selbst wäre wohl auch nicht darauf gekommen, sie static zu setzen; die Aufgabe wünscht es so.


Ich möchte mich an dieser Stelle übrigens sehr herzlich für die Hilfe bedanken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Verständnisfrage zur Modellierung einer HDD Java Basics - Anfänger-Themen 17
I Arbeitszeit / Zeiterfassung - Gedanken und Modellierung Java Basics - Anfänger-Themen 122
L Modellierung Widerstandsnetzwerk Java Basics - Anfänger-Themen 15
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
F OO - Modellierung Java Basics - Anfänger-Themen 24
S Modellierung von Karteneffekten ähnlich YUGIOH Java Basics - Anfänger-Themen 2
1 Modellierung eines Bankkunden Java Basics - Anfänger-Themen 6
N Modellierung eines Programms in UML (Klassendiagramm) Java Basics - Anfänger-Themen 2
A Modellierung Java Basics - Anfänger-Themen 8
M Modellierung eines trivialen Web-Shops Java Basics - Anfänger-Themen 12
C Methoden Ausgabe aller Attribute einer Instanz ohne einzelne Methode Java Basics - Anfänger-Themen 3
krgewb remove beim Iterieren einer HashMap Java Basics - Anfänger-Themen 3
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
F http post einer Webseite nachahmen Java Basics - Anfänger-Themen 3
C Abbruch einer Schleife mit break, meine Übung funktioniert nicht richtig Java Basics - Anfänger-Themen 4
G JTable bei aktivieren einer Zelle soll Text selektiert werden. Java Basics - Anfänger-Themen 24
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
G Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
sserio Prüfziffer einer ISBN Nummer herrausfinden. Java Basics - Anfänger-Themen 14
J Benennung einer mir unbekannten Java - Ausdrucksweise Java Basics - Anfänger-Themen 5
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben