回顾:售票处
本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 16 课,共 57 课。
挑战
中等用三种声明构建一个小型售票处。
Ticket有一个私有构造函数,接收number、show和seat。它的伴生对象包含const val SEATS = 3、一个私有计数器和工厂函数issue(show, seat),票号依次为 1、2、3……;issued表示目前已发出的票数。label()返回#1 Hamlet seat 2。BoxOffice是一个对象。座位号不在 1 到Ticket.SEATS范围内时,sell(show, seat)返回no seat 4;该场次的这个座位已售出时,返回seat 2 taken;否则,它会发出票并返回票面标签。refund(number)会释放已售出票的座位并返回refunded #1,如果没有对应的票,则返回no ticket #9。report()按场次名称的字母顺序返回Hamlet 2/3, Cats 1/3,如果没有售出票,则返回nothing sold。
提供的代码会读取 sell Hamlet 2、refund 1 或 report 命令,打印每条回复,最后输出 tickets issued: 和票数。退款后,票号不会重新使用。
你的代码要写在 Ticket.kt 和 BoxOffice.kt 中。Main.kt 包含提供的输入和输出代码,不能修改。
亲手试试
fun main() {
// 提供的输入输出代码:保持原样。
val input = generateSequence(::readLine).toList()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
"refund" -> println(BoxOffice.refund(p[1].toInt()))
else -> println(BoxOffice.report())
}
}
println("tickets issued: ${Ticket.issued}")
}
面向对象编程中的所有课
自己练习: Kotlin 在线编辑器