Parking
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 55 sur 57.
Défi
DifficileConstruisez un garage de stationnement.
- L’énumération
SizecontientSMALL,MEDIUMetLARGE, dans cet ordre, chacune avec unlabelen minuscules. Vehicle(plate)est une classe scellée avec les propriétés abstraitessizeethourlyRate.Motorbikeest petite (1 par heure),Carest moyen (3) etVanest grand (5).Garage(small, medium, large)est créé avec le nombre de places par taille.park(vehicle)place le véhicule dans une place libre de sa propre taille ou, s’il n’y en a pas, dans une place libre de la taille immédiatement supérieure, et renvoieparked AB12 in medium,full for AB12ouAB12 is already parked.leave(plate, hours)libère la place et renvoieAB12 paid 9(tarif multiplié par le nombre d’heures, avec au moins 1 heure), ouno vehicle AB12.status()renvoiefree: small 1, medium 0, large 2.
Le code fourni lit les places sous la forme small,medium,large, puis les commandes park car AB12 (bike, car ou van), leave AB12 3 ou status, et affiche chaque réponse.
Votre code doit être placé dans Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt et Garage.kt. Main.kt contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
fun main() {
// Code d'entrée/sortie fourni : le garder tel quel
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())
}
}
}
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesConstructeurs primairesBlocs init et validationConstructeurs secondairesRécapitulatif - Carte de bibliothèque4Héritage
Classes ouvertes et sous-classesRedéfinition des membressuper et constructeursClasses abstraitesRécapitulatif – Annuaire du personnel2Propriétés et encapsulation
Accesseurs personnalisésModificateurs de visibilitéSetters privéslazy et lateinitRécapitulatif - Compte bancaire5Interfaces
Déclarer des interfacesMéthodes par défautInterfaces multiplesInterfaces en tant que typesRécapitulatif - Méthodes de paiement8Génériques
Fonctions génériquesClasses génériquesContraintes de typeVariance avec in et outRécapitulatif - File de priorité11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Kotlin