Veranstaltungsplaner
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 56 von 57.
Aufgabe
SchwerErstelle einen Ereignisplaner.
Event(title, day, start, end)(Stunden von 0 bis 24) ist eine Klasse, dieComparable<Event>implementiert und nach Tag, dann Startzeit und dann Titel geordnet wird. Zwei Ereignisse sind gleich, wenn ihr Titel und ihr Tag übereinstimmen (dasselbe Ereignis wurde zweimal eingegeben). Überschreibe daherequalsundhashCodeanhand dieser beiden Eigenschaften. Die Ausgabe erfolgt alsday 3 09-11 standup, mit zweistelligen Stunden.overlaps(other)ist am selben Tag true, wenn jedes Ereignis beginnt, bevor das jeweils andere endet.Scheduler.add(event)antwortet mitinvalid: standup, wenn das Ereignis nicht nach seinem Beginn endet, mitduplicatebei einem gleichen Ereignis, mitconflicts with reviewbeim ersten sich überschneidenden Ereignis in der Agenda-Reihenfolge oder mitadded.agenda()gibt die sortierten Ereignisse zurück, undbusiestDay()gibt für den Tag mit den meisten gebuchten Stundenbusiest day 3: 5hzurück (bei Gleichstand den früheren Tag) oderno events.
Der bereitgestellte Code liest Ereignisse als Zeilen im Format title,day,start,end, gibt für jedes die Antwort aus, danach die Agenda (ein Ereignis pro Zeile) und den Tag mit der höchsten Auslastung.
Dein Code gehört in Event.kt und Scheduler.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
fun main() {
// Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
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())
}
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