使用面向对象编程(Object Oriented Programming)设计一个支持多台垂直电梯的电梯系统。
- 面板需支持呼叫“向上”和“向下”的电梯。
- 面板需支持查询当前正在进行中的呼叫。
- 重复呼叫同一方向的电梯没有效果。
- 底层呼叫向下电梯没有效果。
- 顶层呼叫向上电梯没有效果。
- 电梯(Elevator)
- 电梯需支持查询当前楼层。
- 电梯需支持输入新的目标楼层操作。
- 电梯需支持查询当前所有的目标楼层。
- 电梯需支持一个“去下一个”(Go to Next)的操作。(详见“行为预期”)
- 输入超过范围的楼层没有效果。
- 输入与当前楼层相同的楼层没有效果。
- 用于记录来自所有楼层面板的呼叫请求。
- 给行进中的电梯提供“顺路”的呼叫请求。(详见“行为预期”)
- 给闲置的电梯提供的呼叫请求。(详见“行为预期”)
- 若没有来自楼层的呼叫请求
- 闲置状态的电梯会前往最近的目标楼层。
- 向上行进的电梯会前往高于当前楼层的最近一个目标楼层。若没有更高的目标楼层但有更低的目标楼层则开始向下行进。
- 向下行进的电梯会前往低于当前楼层的最近一个目标楼层。若没有更低的目标楼层但有更高的目标楼层则开始向上行进。
若当前楼层和最近目标楼层之间有呼叫请求
- 若呼叫方向与当前电梯行进方式一致,则电梯会前往呼叫楼层进行顺路拾客。
- 若呼叫方向与当前电梯行进方向相反,则电梯会忽略该请求。
若没有目标楼层
- 若没有呼叫请求,电梯会继续保持静止。
- 若有呼叫请求,电梯会前往其中一个呼叫中的楼层(开放性题目,没有最优答案)。
- 可假设合理的电梯和楼层数量
- 无需考虑电梯行进所需要的时间
- 无需考虑机械层面的复杂性(包括电梯门,马达等)
- 允许加入新的类、变量和函数用于答题
- 允许使用本地熟悉的编程环境进行开发和调试(完成后需要将答案粘贴至此)
- 建议提交前使用测试用例进行自测
- 答案代码长度应为200-400行左右,最多不要超过600行