Menu
Coddy logo textTech

Parkhaus

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 55 von 57.

challenge icon

Aufgabe

Schwer

Erstelle eine Parkgarage.

  • Das Enum Size enthält in dieser Reihenfolge SMALL, MEDIUM und LARGE, jeweils mit einem kleingeschriebenen label.
  • Vehicle(plate) ist eine versiegelte Klasse mit den abstrakten Eigenschaften size und hourlyRate. Motorbike ist klein (1 pro Stunde), Car ist mittelgroß (3) und Van ist 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 gibt parked AB12 in medium, full for AB12 oder AB12 is already parked zurück. leave(plate, hours) gibt den Stellplatz frei und gibt AB12 paid 9 zurück (Tarif mal Stunden, mindestens 1 Stunde) oder no vehicle AB12. status() gibt free: small 1, medium 0, large 2 zurü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

Übe selbstständig: Kotlin-Playground