Bombentrichter
Archiv => 1./2. Semester => Vorlesungen/Übungen 1./2. Semester => Topic started by: tiefenbass on July 07, 2009, 06:53:03 pm
-
Guten Abend,
wir versprochen hier ein Diagramm (als Dateianhang) und den dazugehörigen Code zur 5. und 6. Übung. Wie bereits gesagt, es gibt mehrere Lösungsmöglichkeiten, die der gestellten Aufgabe gerecht werden (z.B. bei den genutzten Klassen der Collection-Framework [ausser bei Fahrzeuge: diese sollen explizit ein einer [FONT="Courier New"]List[/FONT] organisiert werden]) ;)
Autovermietungsfirma
package av1;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Autovermietungsfirma {
private Map kunden;
private List vermietungsstationen;
public Autovermietungsfirma(){
this.kunden=new HashMap();
this.vermietungsstationen=new ArrayList();
}
public Map getKunden() {
return this.kunden;
}
public void setKunden(Map kunden) {
this.kunden = kunden;
}
public List getVermietungsstationen() {
return this.vermietungsstationen;
}
public void setVermietungsstationen(
List vermietungsstationen) {
this.vermietungsstationen = vermietungsstationen;
}
}
Buchung
package av1;
import java.util.Date;
public class Buchung {
private final Date buchungsdatum;
private final Kunde kunde;
private final Fahrzeug fahrzeug;
public Buchung(Kunde kunde, Fahrzeug fahrzeug){
this.buchungsdatum=new Date();
this.fahrzeug=fahrzeug;
this.kunde=kunde;
}
public Date getBuchungsdatum() {
return this.buchungsdatum;
}
public Kunde getKunde() {
return this.kunde;
}
public Fahrzeug getFahrzeug() {
return this.fahrzeug;
}
}
Fahrzeug
package av1;
import java.util.Date;
public abstract class Fahrzeug {
private String polKennzeichen;
private String typ;
private Date baujahr;
private Kategorie kategorie;
public String getPolKennzeichen() {
return this.polKennzeichen;
}
public void setPolKennzeichen(String polKennzeichen) {
this.polKennzeichen = polKennzeichen;
}
public String getTyp() {
return this.typ;
}
public void setTyp(String typ) {
this.typ = typ;
}
public Date getBaujahr() {
return this.baujahr;
}
public void setBaujahr(Date baujahr) {
this.baujahr = baujahr;
}
public Kategorie getKategorie() {
return this.kategorie;
}
public void setKategorie(Kategorie kategorie) {
this.kategorie = kategorie;
}
}
Kategorie
package av1;
import java.util.HashMap;
public enum Kategorie {
BILLIG,MODERAT,TEUER;
private int mietpreis;
private HashMap fahrzeuge = new HashMap();
public int getMietpreis() {
return this.mietpreis;
}
public void setMietpreis(int mietpreis) {
this.mietpreis = mietpreis;
}
public Map getFahrzeuge() {
return this.fahrzeuge;
}
public void setFahrzeuge(Map fahrzeuge) {
this.fahrzeuge = fahrzeuge;
}
}
Kunde
package av1;
public class Kunde {
}
LKW
package av1;
public class LKW extends Fahrzeug {
private float maxNutzlast;
public float getMaxNutzlast() {
return maxNutzlast;
}
public void setMaxNutzlast(float maxNutzlast) {
this.maxNutzlast = maxNutzlast;
}
}
PKW
package av1;
public class PKW extends Fahrzeug {
}
Vermietungsstation
package av1;
import java.util.List;
import java.util.ArrayList;
public class Vermietungsstation {
private List fuhrpark;
private List buchungen;
public Vermietungsstation () {
this.fuhrpark = new ArrayList();
this.buchungen = new ArrayList();
}
public Fahrzeug ausleihen(String polKennzeichen, Kunde kunde) {
for (Fahrzeug fz : fuhrpark) {
if (fz.getPolKennzeichen().equals(polKennzeichen)) {
buchungen.add(new Buchung(kunde, fz));
fuhrpark.remove(fz);
return fz;
}
}
return null;
}
public void zurueckgeben(Fahrzeug fahrzeug) {
fuhrpark.add(fahrzeug);
}
public List getFuhrpark() {
return fuhrpark;
}
public void setFuhrpark(List fuhrpark) {
this.fuhrpark = fuhrpark;
}
public List getBuchungen() {
return buchungen;
}
}
LG, Matthias
-
Hier der Code für die Kategorie als normale Klasse
package av1;
import java.util.HashMap;
public class Kategorie {
public static Kategorie BILLIG = new Kategorie();
public static Kategorie MODERAT = new Kategorie();
public static Kategorie TEUER = new Kategorie();
private final int nummer;
private int mietpreis;
private HashMap fahrzeuge;
private static int nextNummer=0;
private Kategorie() {
this.nummer = nextNummer++;
this.fahrzeuge = new HashMap();
this.mietpreis = 0;
}
public int getMietpreis() {
return this.mietpreis;
}
public void setMietpreis(int mietpreis) {
this.mietpreis = mietpreis;
}
public Map getFahrzeuge() {
return this.fahrzeuge;
}
public void setFahrzeuge(Map fahrzeuge) {
this.fahrzeuge = fahrzeuge;
}
public int getNummer() {
return this.nummer;
}
}
LG, Matthias
-
public Fahrzeug ausleihen(String polKennzeichen, Kunde kunde) {
for (Fahrzeug fz : fuhrpark) {
if (fz.getPolKennzeichen().equals(polKennzeichen)) {
buchungen.add(new Buchung(kunde, fz));
fuhrpark.remove(fz);
return fz;
}
}
return null;
}
Wie funktioniert deine Schleife da genau? Du erstellst ein Objekt fz und lässt es durch deine List fuhrpark durchlaufen. Wie ist da die Austrittsbedingung? Wenn die List zuende ist? Ich kenne das nur so for(int i=0; i<=fuhrpark.size();i++){...}
-
Hallo the_hat,
eines vorweg: deine Lösung ist ebenfalls machbar... und man kann es auch mittels einer while-Schleife lösen. Drei verschiedene Ansätze für dasselbe Ergebnis ;)
Zu deiner Frage:
diese Art von FOR-Schleife kann man für alle Typen benutzen, die das Interface [FONT="Courier New"]Iterable (http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html)[/FONT] implementieren.
Funktioniert folgendermaßen: die for-Schleife geht vom ersten bis zum letzten Element des [FONT="Courier New"]Iterable[/FONT]-Objektes (also von [FONT="Courier New"]0 [/FONT]bis [FONT="Courier New"](size()-1)[/FONT] )durch. Bei jedem Durchgang durch die Schleife wird die Objektreferenz des jeweiligen Elementes, bei dem es gerade ist, der Variable [FONT="Courier New"]fz[/FONT] zugewiesen. Da das [FONT="Courier New"]Iterable[/FONT]-Objekt ja nur Elemente vom Typ [FONT="Courier New"]Fahrzeug [/FONT]enthält, wurde die Variable [FONT="Courier New"]fz [/FONT]ebenfalls als Typ [FONT="Courier New"]Fahrzeug [/FONT]deklariert.
Somit hast du innerhalb der Schleife auf [FONT="Courier New"]fz [/FONT]die Referenz zu dem Objekt, für den der Schleifendurchgang gerade gilt (bei deiner for-Schleife würdest du dir die Referenz separat mit[FONT="Courier New"] fuhrpark.get(i)[/FONT] holen).
Das Attribut [FONT="Courier New"]fuhrpark [/FONT]ist ja ein Objekt vom Typ [FONT="Courier New"]List (http://java.sun.com/javase/6/docs/api/java/util/List.html)[/FONT], welches wiederum als Superinterface [FONT="Courier New"]Iterable [/FONT]hat. [FONT="Courier New"]List [/FONT]erbt also von [FONT="Courier New"]Iterable [/FONT]und ist somit auch ein spezieller Typ [FONT="Courier New"]Iterable[/FONT].
Der Rest ist schnell erklärt: Wenn das passende [FONT="Courier New"]Fahrzeug[/FONT] gefunden wurde, wird eine [FONT="Courier New"]Buchung [/FONT]erstellt, das [FONT="Courier New"]Fahrzeug [/FONT]aus der Liste [FONT="Courier New"]fuhrpark [/FONT]entfernt (ich vermeide dadurch Doppelbuchungen, d.h. zwei verschiedene Kunden haben dasselbe Fahrzeug zur gleichen Zeit) und von der Methode zurückgegeben.
... eine [FONT="Courier New"]Map (http://java.sun.com/javase/6/docs/api/java/util/Map.html)[/FONT]ist kein [FONT="Courier New"]Iterable[/FONT], deshalb könnt ihr da nicht mit dieser [FONT="Courier New"]Iterable[/FONT]-for-Schleife durchlaufen. Es gibt übrigens noch mehr solch spezieller for-Schleifen, aber es gehören dazu immer spezielle Bedingungen. All diese Spezialfälle können immer durch die "normale" for-Schleife ersetzt werden :happy:
LG, Matthias
-
Hi, war die Aufgabe nur das Diagramm in Java umwandeln? Oder woher soll ich wissen das ich einen Array oder ne Hashmap verwenden soll..
Danke
-
Hi, war die Aufgabe nur das Diagramm in Java umwandeln? Oder woher soll ich wissen das ich einen Array oder ne Hashmap verwenden soll..
Danke
Wenn keine Vorgabe da ist, such es dir aus. Die verwendete Datenstruktur sollte aber die Multiplizitäten abbilden können die vorgegeben sind und -wenn vorgegeben- Randbedingungen genügen.