题目集1~3的总结性Blog
前言
- 知识点上全是语法题和模拟,题量上中等,每次也就\(3-5\)题。但难度巨大让人痛苦。
题集一
- \(1-4\)题均为语法题十分简单,基本可以采取面向过程的编程方式。第\(5\)题为电梯调度最后统一说明。
题集二
- 题目类型为简单的类设计并且已经给出了类图。对着一步步补全函数也十分简单。
![image]()
题集三
- 除去类的设计还多了仿真和方法类的设计区别于有实体的类,但有类图也十分简单。
![image]()
设计与分析
- 基于除去电梯调度的题目都比较简单,这里只详细叙述电梯调度的流程。
类图

SourceMontor


类设计:
本题给定一个电梯控制系统。系统中包含两个类:Elevator 与 Main。
Elevator 用于模拟电梯的调度逻辑,Main 用于读取输入并启动程序。
下面给出 Elevator 类与 Main 类的完整设计说明。
类名为 $ Elevator $ ,包含如下属性(均为私有):
- $ maxFloor $ :电梯可到达的最高楼层
- $ minFloor $ :电梯可到达的最低楼层
- $ currentFloor $ :当前所在楼层
- $ direction $ :电梯方向(\(1\) 表示上行,\(0\) 表示静止,\(-1\) 表示下行)
- $ state $ :电梯状态(\(0\) 停止,\(1\) 运行)
- $ internalRequests $ :内部按键请求队列
- $ externalRequests $ :外部呼叫楼层队列
- $ externalRequestsDir $ :外部呼叫方向队列(数值 \(1\) 表示 UP、\(-1\) 表示 DOWN)
构造方法为
$ Elevator(minFloor,\ maxFloor) $
用于初始化楼层范围,并将 currentFloor 设为 minFloor,所有队列初始化为空。
Elevator 的公开方法如下:
-
$ addRequest(request) $
解析字符串形式的请求,并将合法请求加入相应队列。 -
$ processRequests() $
控制电梯依次处理所有内部与外部请求,输出运行过程。 -
$ activateElevator() $
当电梯空闲时,根据未处理请求选择初始方向并启动。
Elevator 的私有方法如下:
-
$ validateFloor(floor) $
判断 floor 是否在 $ [minFloor,\ maxFloor] $ 范围内。 -
$ determineInitialDirection() $
根据所有请求决定电梯首次运行方向。 -
$ hasRequestAbove(floor) $
检查是否存在比 floor 更高的请求。 -
$ hasRequestBelow(floor) $
检查是否存在比 floor 更低的请求。 -
$ hasHigherRequest(queue,\ floor) $
判断队列中是否存在高于 floor 的楼层。 -
$ hasLowerRequest(queue,\ floor) $
判断队列中是否存在低于 floor 的楼层。 -
$ hasPendingRequests() $
检查是否仍有未完成的请求。 -
$ shouldStop(floor) $
判断电梯是否需要在当前层停靠。 -
$ removeRequestsAtCurrentFloor() $
删除当前楼层的所有匹配请求。 -
$ moveOneFloor() $
按照 direction 移动一层,并输出当前位置与方向。 -
$ getDirectionString() $
将方向数值转换为字符串 UP / DOWN / IDLE。 -
$ checkDirectionChange() $
根据剩余请求情况实时调整 direction。
类名 $ Main $ 只有一个方法:
$ main(args) $
使用 Scanner 读取电梯楼层范围、用户请求指令,创建 Elevator 对象并调用
$ processRequests() $ 运行整个调度流程。
总结
- 在这次作业迭代过程中,我深刻体会到了优秀代码设计的重要性。由于我在前期未能充分重视这一方面,我直接采取了面向过程的编程方式,导致最终不得不对代码进行大规模重构以满足新的需求和标准。 尽管这次重构最终帮助我完成了作业,但其中所经历的挑战与曲折让我感到自责与懊悔。
- 这次经历教会了我许多宝贵的经验教训。首先,预见性是高质量代码设计的关键要素之一,一个良好的设计不仅仅是实现当前的功能要求,还需要考虑未来可能的变化和发展。这就需要我们在编写每一行代码时都要有长远的眼光,思考其在未来维护和扩展中的可能性。
- 其次,灵活性同样不可或缺。灵活的设计能够使代码更容易适应变化的需求,减少后期调整的成本和风险。最后,我认为更加注重前期的需求分析和架构设计至关重要。这不仅有助于确保代码的可维护性和可扩展性,还可以提高开发效率,降低错误发生的概率。



浙公网安备 33010602011771号