Parkhaus
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 55 von 57.
Aufgabe
SchwerErstelle eine Parkgarage.
- Das Enum
Sizeenthält in dieser ReihenfolgeSMALL,MEDIUMundLARGE, jeweils mit einem kleingeschriebenenlabel. Vehicle(plate)ist eine versiegelte Klasse mit den abstrakten EigenschaftensizeundhourlyRate.Motorbikeist klein (1 pro Stunde),Carist mittelgroß (3) undVanist groß (5).Garage(small, medium, large)wird mit der Anzahl der Stellplätze pro Größe erstellt.park(vehicle)stellt das Fahrzeug auf einen freien Stellplatz seiner eigenen Größe oder, falls keiner vorhanden ist, auf einen Stellplatz der nächstgrößeren Größe, sofern einer verfügbar ist, und gibtparked AB12 in medium,full for AB12oderAB12 is already parkedzurück.leave(plate, hours)gibt den Stellplatz frei und gibtAB12 paid 9zurück (Tarif mal Stunden, mindestens 1 Stunde) oderno vehicle AB12.status()gibtfree: small 1, medium 0, large 2zurück.
Der bereitgestellte Code liest die Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12 (bike, car oder van), leave AB12 3 oder status, und gibt jede Antwort aus.
Dein Code gehört in Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt und Garage.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
fun main() {
// Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenPrimärkonstruktoreninit-Blöcke und ValidierungSekundärkonstruktorenRückblick – Bibliotheksausweis4Vererbung
Offene Klassen und UnterklassenÜberschreiben von Membernsuper und KonstruktorenAbstrakte KlassenRückblick – Mitarbeiterverzeichnis2Eigenschaften und Kapselung
Benutzerdefinierte ZugriffsmethodenSichtbarkeitsmodifikatorenPrivate Setterlazy und lateinitWiederholung – Bankkonto5Schnittstellen
Schnittstellen deklarierenStandardmethodenMehrere SchnittstellenSchnittstellen als TypenRückblick – Zahlungsmethoden8Generics
Generische FunktionenGenerische KlassenTypbeschränkungenVarianz mit in und outRückblick – Prioritätswarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Kotlin-Playground