Parking wielopoziomowy
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 55 z 57.
Wyzwanie
TrudnyZbuduj parking wielopoziomowy.
- Wyliczenie
SizezawieraSMALL,MEDIUMiLARGE, w tej kolejności, każde z etykietąlabelzapisaną małymi literami. Vehicle(plate)to klasa zapieczętowana z abstrakcyjnymi właściwościamisizeihourlyRate.Motorbikejest mały (1 za godzinę),Carjest średni (3), aVanjest duży (5).Garage(small, medium, large)jest tworzony z liczbą miejsc dla każdego rozmiaru.park(vehicle)umieszcza pojazd na wolnym miejscu jego rozmiaru lub, jeśli takiego nie ma, na wolnym miejscu o kolejnym większym rozmiarze, i zwracaparked AB12 in medium,full for AB12lubAB12 is already parked.leave(plate, hours)zwalnia miejsce i zwracaAB12 paid 9(stawka razy liczba godzin, co najmniej 1 godzina) lubno vehicle AB12.status()zwracafree: small 1, medium 0, large 2.
Dostarczony kod odczytuje liczbę miejsc w formacie small,medium,large, a następnie polecenia park car AB12 (bike, car lub van), leave AB12 3 albo status i wypisuje każdą odpowiedź.
Twój kod umieść w plikach Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt i Garage.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
}
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin