停车场
本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 55 课,共 57 课。
挑战
困难构建一个停车场。
- 枚举
Size按顺序包含SMALL、MEDIUM和LARGE,每个值都有一个小写的label。 Vehicle(plate)是一个密封类,具有抽象属性size和hourlyRate。Motorbike是小型车辆(每小时 1),Car是中型车辆(3),Van是大型车辆(5)。- 创建
Garage(small, medium, large)时,需要指定每种尺寸的车位数量。park(vehicle)会将车辆停入一个空闲的同尺寸车位;如果没有,则停入有空位的下一个更大尺寸车位,并返回parked AB12 in medium、full for AB12或AB12 is already parked。leave(plate, hours)会释放车位并返回AB12 paid 9(费率乘以小时数,至少按 1 小时计算),或者返回no vehicle AB12。status()会返回free: small 1, medium 0, large 2。
提供的代码会读取车位数量,格式为 small,medium,large,然后读取命令 park car AB12(bike、car 或 van)、leave AB12 3 或 status,并打印每条回复。
你的代码应写在 Size.kt、Vehicle.kt、Motorbike.kt、Car.kt、Van.kt 和 Garage.kt 中。Main.kt 包含提供的输入/输出代码,不能编辑。
亲手试试
fun main() {
// 提供的输入输出代码:保持原样。
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
面向对象编程中的所有课
自己练习: Kotlin 在线编辑器