Abgabe: 8.11.2013 Beispiel 3.1 [Swap.java] Implementieren Sie die Klasse ue41.swap mit der statischen Methode static void arrange(swaplist list ), die die Elemente von list so umordnet, dass alle Elemente mit einer gewissen Eigenschaft vor den Elementen ohne dieser Eigenschaft angeordnet sind. Die vordefinierte Klasse ue41.swaplist beschreibt eine Liste von Elementen mit einer Boole schen Eigenschaft. Auf eine SwapList können folgenden Methoden angewandt werden: public class SwapList * Returns the number of elements in the list. * The smallest index in the list is 0. public int size(); Swaps the i-th and j-th element. public void swap(int i, int j); Returns true if the i-th Element has the property. public boolean hasproperty(int i); Um Ihre Methode arrange() zu testen, wird es notwendig sein, auch die Klasse SwapList zu implementieren. Beispiel 3.2 [Routenplaner.java] Gegeben ist die Klasse Ort im Paket routenplanung. Die Orte sind von 0 beginnend durchnummeriert. Die Methode double getdirekteentfernungzu(ort andererort) in der Klasse Ort liefert die direkte Entfernung vom befragten Ort zum Ort andererort. Schreiben Sie eine Klasse routenplanung.routenplaner mit folgenden Eigenschaften: Es gibt einen Konstruktor Routenplaner(Ort[]ortsliste), der den Routenplaner für diese Liste von Orten anlegt. Es gibt eine Methode double getkuerzesteentfernung(ort start, Ort ziel), die die Länge des kürzesten Weges von start nach ziel über höchstens einen Ort als Zwischenstation zurückliefert. Beachten Sie, dass der Weg über eine Zwischenstation kürzer sein kann als der direkte Weg. - 1 -
Beispiel 3.3 Gegeben sind die Klassen Webseite und Suchmaschine. Die Klasse Suchmaschine verfügt über den Konstruktor public Suchmaschine(ArrayList<Webseite> diewebseiten) sowie über die Methode public ArrayList<Webseite> finde(string wort), die eine Liste von allen (durch den Konstruktor bekannten) Webseiten zurückgibt, die wort enthalten. Schreiben Sie eine Klasse ErweiterteSuchmaschine, die von Suchmaschine erbt und das folgende Interface ErweiterteSuche implementiert: interface ErweiterteSuche * Gibt eine Liste von allen Webseiten zurück, * die poswort enthalten und negwort nicht enthalten. public ArrayList<Webseite> findemitohne(string poswort, String negwort); Die Klasse ErweiterteSuchmaschine soll auch über den Konstruktor public ErweiterteSuchmaschine(ArrayList<Webseite> diewebseiten) verfügen. Beispiel 3.4 Gegeben ist eine Klasse Ort mit der Methode double getdistanzzu(ort andererort), die die Distanz zu dem anderen Ort zurückliefert. Weiters ist die Unterklasse Tankstelle der Klasse Ort gegeben. Schreiben Sie eine Klasse LKW mit dem Konstruktor LKW(double reichweite), dem die Reichweite des LKWs bei vollem Tank übergeben wird. Die Klasse LKW soll weiters die Methode ArrayList<Tankstelle> berechnetankstops(ort[] route) enthalten, die berechnet, an welchen Orten der angegebenen Route der LKW aufgetankt werden muss, um sein Ziel zu erreichen. Die Auswahl der Tankstops soll so erfolgen, dass ihre Anzahl möglichst gering ist. Sie können annehmen, dass die Route aus zumindest zwei Orten besteht, und dass die Fahrt des LKWs voll getankt im Ort route[0] beginnt. Natürlich kann der LKW nur an Orten betankt werden, die Tankstellen sind. Dies kann z.b. mittels (route[i] instanceof Tankstelle) überprüft werden. Liegen die Tankstellen soweit auseinander, dass der LKW die Route nicht abfahren kann, dann soll die Methode null zurückliefern. - 2 -
Beispiel 3.5 [Auftraege.java] Gegeben sind Arbeitsaufträge unterschiedlicher Dauer. Die benötigte Anzahl von Stunden für jeden Auftrag ist in einem int-array hinterlegt. Schreiben Sie die Klasse ueb.auftraege mit der Methode public static int getmaxanzahl(int[] auftragslaengen, int maxstunden), die die maximale Anzahl der Aufträgen zurückliefert, die in maxstunden erledigt werden können. (Die Aufträge, die erledigt werden, können beliebig aus den gegebenen Aufträgen gewählt werden.) Beispiel 3.6 Gegeben sei eine Klasse Gebrauchsteil. Diese Klasse verfügt über den Konstruktor public Gebrauchsteil(int baunummer), der ein neues Gebrauchsteil der entsprechenden Baunummer erzeugt. Weiters verfügt die Klasse Gebrauchsteil über die Methoden public int getid(), public int getlebensdauer(), die eine eindeutige Identifikationsnummer und die Lebensdauer des Gebrauchsteils zurück liefern. Schreiben Sie eine Klasse Anlage mit Konstruktor public Anlage (int [] baunummern), der eine Anlage erzeugt, die aus neuen Gebrauchsteilen mit den angegebenen Baunummern besteht. Weiters soll eine Anlage mittels der Methode public void simuliere(int anzeinheiten) wiederholt für anzeinheiten Zeiteinheiten simuliert werden können. Dabei soll nach jeder Zeiteinheit überprüft werden, ob die Lebensdauer eines Gebrauchsteils erreicht ist. Gegebenenfalls sollen diese Gebrauchsteile durch neue Gebrauchsteile der jeweils gleichen Baunummer ersetzt werden. Die Methode public Gebrauchsteil [] getgebrauchsteile() soll die aktuellen Gebrauchsteile der Anlage zurück liefern. - 3 -
Beispiel 3.7 Implementieren Sie in der folgenden Klasse Stadt die Klassenmethode printweg(). Sie können dazu auch noch weitere Methoden implementieren. public class Stadt private String name; /* Die Attribute norden, osten, sueden, westen bezeichnen * die Nachbarstädte. Wenn keine Nachbarstadt in der * angegebenen Richtung existiert, ist der Attributwert * null. private Stadt norden, osten, sueden, westen; public Stadt(String name) this.name = name; public void setnachbarn(stadt norden, Stadt osten, Stadt sueden, Stadt westen) this.norden = norden; this.osten = osten; this.sueden = sueden; this.westen = westen; * Gibt die Liste der Städte auf einem Weg von start zu * ziel zurück, der höchstens maxlaenge lang ist. Wenn ein * solcher Weg nicht existiert, wird null zurückgegeben. * Die Länge des Weges ist die Anzahl der Schritte, * die benötigt werden, um über Nachbarstädte von * start zu ziel zu kommen. public static List<Stadt> printweg(stadt start, Stadt ziel, int maxlaenge) // zu implementieren - 4 -
Beispiel: Für die Städte a,,e ergeben die Aufrufe b a c d e printweg(a,d,2): null printweg(a,d,3): a -> b -> c -> d printweg(a,d,4): a -> b -> c -> d - 5 -