Menu
CoddyTech

活动安排器

本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 56 课,共 57 课。

challenge icon

挑战

困难

构建一个事件日程安排器。

  • 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 在线编辑器