活动安排器
本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 56 课,共 57 课。
挑战
困难构建一个事件日程安排器。
Event(title, day, start, end)(小时范围为 0 到 24)是一个实现Comparable<Event>的类,排序依据依次为日期、开始时间和标题。当两个事件的标题和日期相同时,它们相等(即同一个事件被输入了两次),因此要根据这两个属性重写equals和hashCode。事件的输出格式为day 3 09-11 standup,小时数使用两位数。若在同一天,每个事件的开始时间都早于另一个事件的结束时间,则overlaps(other)为 true。- 如果事件的结束时间不晚于开始时间,
Scheduler.add(event)会返回invalid: standup;如果事件相同,则返回duplicate;如果存在重叠事件,则按日程顺序对第一个重叠事件返回conflicts with review;否则返回added。 agenda()会返回排序后的事件;busiestDay()会为预订总小时数最多的日期返回busiest day 3: 5h(总小时数相同时选择较早的日期),如果没有事件则返回no events。
提供的代码会将事件读取为格式为 title,day,start,end 的行,为每个事件打印回复,然后打印日程(每行一个事件)和最忙的日期。
你的代码要写在 Event.kt 和 Scheduler.kt 中。Main.kt 包含提供的输入和输出代码,不能修改。
亲手试试
fun main() {
// 提供的输入/输出代码:保持原样
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())
}
面向对象编程中的所有课
自己练习: Kotlin 在线编辑器