Hallo an Alle,
ich habe ein paar Schwierigkeiten beim Beenden folgender Aufgabe:
Implementieren Sie die Klasse Notaufnahme, wie diese durch das UML-Diagramm vordefiniert wurde. Die Definition vorhandener Parkplätze vor der Notaufnahme wird über den Konstruktor der Klasse definiert. Die Anzahl der Parkplätze wird dekrementiert, wenn ein RTW einfährt und entsprechend inkrementiert, wenn der RTW wieder ausfährt.
Bei Schritt 3+4 weiß ich nicht so recht, wie ich die wait() und notify() Methoden implementieren soll. In meinem Code kriege ich einen Fehler , wenn ich versuche die Methode mit Rettungswagen aufzurufen.
Des Weiteren habe ich keinen Plan wie ich die addRTW() und removeRTW() Methoden richtig aufrufen soll (3.3 und 3.7). Man muss ja den Rettungswagen der Methode übergeben, aber ich weiß einfach nicht wie ich das hinkriegen soll.
Implementieren Sie die Klasse Rettungswagen wie diese im UML Diagramm vorgegeben wurde. Jeder Rettungswagen hat ein eindeutiges Kennzeichen und gehört zu einer bestimmten Notaufnahme eines Krankenhauses. Ein Krankenhaus kann beliebig viele Rettungswagen besitzen.
ich habe ein paar Schwierigkeiten beim Beenden folgender Aufgabe:
Implementieren Sie die Klasse Notaufnahme, wie diese durch das UML-Diagramm vordefiniert wurde. Die Definition vorhandener Parkplätze vor der Notaufnahme wird über den Konstruktor der Klasse definiert. Die Anzahl der Parkplätze wird dekrementiert, wenn ein RTW einfährt und entsprechend inkrementiert, wenn der RTW wieder ausfährt.
- Implementieren Sie den Konstruktor der Klasse Notaufnahme. Stellen Sie bereits im Konstruktor sicher, dass mindestens 1 Parkplatz vor der Notaufnahme existieren. Andernfalls werfen Sie eine Exception.
- Die Methode getPlaces() soll die Anzahl der noch verfügbaren Parkplätze zurückliefern.
- Implementieren Sie die Methode einfahren(). Stellen Sie sicher, dass immer nur ein RTW zur gleichen Zeit einfahren kann. Sollten beim Einfahren keine Parkplätze sein, so wartet der RTW bis ein Parkplatz frei wird (wait()).
- ImplementierenSie die Methode ausfahren().
1. TeilenSie den ggf. wartenden RTW mit, dass ein Platz freigeworden ist
(notify()). - Implementieren Sie die Methoden addRTW(...) und removeRTW(...) zum
Aufnehmen/Entfernen des RTW zu Liste der Rettungswagen.
Java:
package Schritt2;
import java.util.ArrayList;
public class Notaufnahme {
private int anzahlPlaetze;
private ArrayList<Rettungswagen> parkendeRTWList;
public Notaufnahme(int anzahlPlaetze, ArrayList<Rettungswagen> parkendeRTWList) {
this.anzahlPlaetze = anzahlPlaetze;
this.parkendeRTWList = parkendeRTWList;
if (anzahlPlaetze == 0) {
throw new IllegalArgumentException("Es muss mindestens 1 Platz existieren");
}
}
public Notaufnahme(int numberplaces) {
}
public void einfahren() {
Rettungswagen.wait();
}
public void ausfahren() {
}
public void addRTW(Rettungswagen rtw) {
parkendeRTWList.add(rtw);
}
public void removeRTW(Rettungswagen rtw) {
parkendeRTWList.remove(rtw);
}
public int getPlaces() {
return anzahlPlaetze;
}
}
Bei Schritt 3+4 weiß ich nicht so recht, wie ich die wait() und notify() Methoden implementieren soll. In meinem Code kriege ich einen Fehler , wenn ich versuche die Methode mit Rettungswagen aufzurufen.
Des Weiteren habe ich keinen Plan wie ich die addRTW() und removeRTW() Methoden richtig aufrufen soll (3.3 und 3.7). Man muss ja den Rettungswagen der Methode übergeben, aber ich weiß einfach nicht wie ich das hinkriegen soll.
Implementieren Sie die Klasse Rettungswagen wie diese im UML Diagramm vorgegeben wurde. Jeder Rettungswagen hat ein eindeutiges Kennzeichen und gehört zu einer bestimmten Notaufnahme eines Krankenhauses. Ein Krankenhaus kann beliebig viele Rettungswagen besitzen.
- Implementieren Sie den Konstruktor der Klasse Rettungswagen. Beachten Sie dass, ein RTW nach Erzeugung des Objektes direkt genutzt werden kann und damit der zugehörige Thread gestartet werden muss.
- Implementieren Sie die Klasse getKennzeichen(), welche das eindeutige Kennzeichen des RTW zurückliefert.
- Ein Rettungswagen wird als Thread implementiert, da ein RTW jederzeit zu einem Notfall gerufen werden kann und anschließend in die Notaufnahme des Krankenhauses einfährt, bzw. diese verlässt. Implementieren Sie die Run- Methode der Klasse
- Ein RTW soll zunächst eine Weile unterwegs sein, bevor er in die Notaufnahme einfahren kann.
- NachdemderRTWindieNotaufnahmeeingefahrenistwirddiesaufder Konsole ausgegeben.
- Nach dem Einfahren wird der RTW mit Hilfe der Methode addRTW(...)der Klasse Notaufnahme in die Liste der parkenden RTW aufgenommen.
- Die Punkte 1-3 sollen unterbrechungsfrei (Atomar) ausgeführt werden. Verwenden Sie als Lock-Objekt die zugehörige Notaufnahme.
- AnschließendparkterfüreinegewisseZeitvorderNotaufnahmebevor er diese wieder verlässt.
- Das Verlassen der Notaufnahme wird wieder über die Konsole mitgeteilt.
- Nach dem Ausfahren soll der RTW mit Hilfe der MethoderemoveRTW() der Klasse Notaufnahme wieder aus der Liste der parkenden RTW entfernt werden.
- Die Punkte 5-7 sollen unterbrechungsfrei (Atomar) ausgeführt werden. Verwenden Sie das gleiche Lock-Objekt wie in 4.
Java:package Schritt2; import java.util.concurrent.ThreadLocalRandom; public class Rettungswagen extends Thread{ private String kennzeichen; private Notaufnahme zugehoerigeNotaufnahme; public Rettungswagen(String kennzeichen, Notaufnahme zugehoerigeNotaufnahme){ this.kennzeichen = kennzeichen; this.zugehoerigeNotaufnahme = zugehoerigeNotaufnahme; Thread.currentThread().start(); } public void Rettungswagen(String kennzeichen, Notaufnahme notaufnahme) { } public void run(Notaufnahme zugehoerigeNotaufnahme) { synchronized(zugehoerigeNotaufnahme) { System.out.println("RTW mit dem Kennzeichen: " + kennzeichen + " ist eingefahren." + Thread.currentThread()); Notaufnahme.addRTW(); } try { Thread.sleep(ThreadLocalRandom.current().nextInt()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized(zugehoerigeNotaufnahme) { System.out.println("RTW mit dem Kennzeichen: " + kennzeichen + " ist wieder ausgefahren." + Thread.currentThread()); } } public String getKennzeichen() { return kennzeichen; } }
Und abschließend würdet Ihr mir sehr weiterhelfen, wenn mir jemand erklärt, wie man es hinkriegt, dass jeder Rettungswagen ein anderes Kennzeichen hat? Und wieso ich die runMethode nicht aufrufen kann? (Als Fehler steht: Cannot invoke run() on the array type Rettungswagen[])
Die Klasse Notfall soll die Anwendung zur Notfallsimulation starten und es ermöglichen verschiedene Szenarien auf Basis verschiedener Anfangskonstellationen darzustellen.- Implementieren Sie die Main-Methode der Klasse Notfall indem Sie hier die konkreten Objekte für die Notaufnahme und die Rettungswagen erzeugen. Die Objekterzeugung der Rettungswagen sollten dynamisch innerhalb einer for- Schleife bis zu der definierten Anzahl an RTW generiert werden.
- Spielen Sie exemplarisch folgende Szenarien durch:
1. Klinik mit einer Notaufnahme und 5 Parkplätzen. Insgesamt sind 10 RTW
unterwegs, welche nacheinander die Notaufnahme aufsuchen.
2. Klinik mit einer Notaufnahme und 2 Parkplätzen. Insgesamt sind 10 RTW
unterwegs, welche nacheinander die Notaufnahme aufsuchen.
Java:package Schritt2; public class Notfall { public static void main(String[] args) { Notaufnahme notaufnahme1 = new Notaufnahme (5); Rettungswagen [] rettungswagen = new Rettungswagen[10]; for ( int i = 0; i <=10; i++ ) { rettungswagen[i] = new Rettungswagen("abc", notaufnahme1); } [B] [/B]rettungswagen.run(); } }