Zeile 52 gibInstrument();?! Welcher Sinn steckt dahinter?
In der Aufgabe steht, dass der Musiker beeim Aufruf der Methode doSomething angibt, welches Instrument er spielt.
Zeile 52 - dachte ich - wäre die Umsetzung davon.
Ist dem nicht so?
Zeile 52 gibInstrument();?! Welcher Sinn steckt dahinter?
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>."
public void doSomething(){
double b=Math.random();
System.out.println("Der Musiker " + name " spielt gerade " + instrument);
if(b<0.5){
leave();
}
}
Ein letztes mal: Ein Musiker soll die Bar nicht verlassen wenn doSomthing aufgerufen wird.if(bar.getSizeOfListOfMusician()<5) sieht übrigens rightig aus
// 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);
}
So?
Java:public void doSomething(){ System.out.println("Der Musiker " + name + " spielt gerade " + instrument); }
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); } }
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
}
}
}
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
}
}
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 (Elementyp element: sammlung){
Schleifenrumpf
}
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
}
}
}
Main.java:38:
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
}
}
}
// 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 "-";
}
}
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
}
}
}
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;
}
// 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);
}
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 "-";
}
}
public void serve(Drink drink, Guest guest){
}
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;
}
}
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);
}
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;
}
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 "-";
}
Das habe ich ja versucht:
Java:public class Menu{[/QUOTE] Das static musst Du weglassen.