Planificateur d’événements
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 56 sur 57.
Défi
DifficileCréez un planificateur d’événements.
Event(title, day, start, end)(heures de 0 à 24) est une classe qui implémenteComparable<Event>, triée par jour, puis par heure de début, puis par titre. Deux événements sont égaux lorsque leur titre et leur jour correspondent (le même événement saisi deux fois) ; vous devez donc redéfinirequalsethashCodesur ces deux propriétés. Il s’affiche sous la formeday 3 09-11 standup, avec des heures à deux chiffres.overlaps(other)vaut true le même jour lorsque chacun commence avant la fin de l’autre.Scheduler.add(event)renvoieinvalid: standuplorsque l’événement ne se termine pas après son début,duplicatepour un événement égal,conflicts with reviewpour le premier événement qui se chevauche dans l’ordre de l’agenda, ouadded.agenda()renvoie les événements triés, etbusiestDay()renvoiebusiest day 3: 5hpour le jour ayant le plus grand nombre d’heures réservées (le jour le plus tôt en cas d’égalité), ouno events.
Le code fourni lit les événements sous forme de lignes title,day,start,end, affiche la réponse pour chacun, puis l’agenda (un événement par ligne) et le jour le plus chargé.
Votre code doit se trouver dans Event.kt et Scheduler.kt. Main.kt contient le code fourni pour les entrées et sorties 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 scheduler = Scheduler()
for (line in input) {
val p = line.split(",")
println(scheduler.add(Event(p[0], p[1].toInt(), p[2].toInt(), p[3].toInt())))
}
for (e in scheduler.agenda()) println(e)
println(scheduler.busiestDay())
}
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