题目集1~3的总结性Blog

前言

  • 知识点上全是语法题和模拟,题量上中等,每次也就\(3-5\)题。但难度巨大让人痛苦。

题集一

  • \(1-4\)题均为语法题十分简单,基本可以采取面向过程的编程方式。第\(5\)题为电梯调度最后统一说明。

题集二

  • 题目类型为简单的类设计并且已经给出了类图。对着一步步补全函数也十分简单。
    image

题集三

  • 除去类的设计还多了仿真和方法类的设计区别于有实体的类,但有类图也十分简单。
    image

设计与分析

  • 基于除去电梯调度的题目都比较简单,这里只详细叙述电梯调度的流程。

类图

image

SourceMontor

image

image

类设计:

本题给定一个电梯控制系统。系统中包含两个类:Elevator 与 Main。
Elevator 用于模拟电梯的调度逻辑,Main 用于读取输入并启动程序。

下面给出 Elevator 类与 Main 类的完整设计说明。

类名为 $ Elevator $ ,包含如下属性(均为私有):

  1. $ maxFloor $ :电梯可到达的最高楼层
  2. $ minFloor $ :电梯可到达的最低楼层
  3. $ currentFloor $ :当前所在楼层
  4. $ direction $ :电梯方向(\(1\) 表示上行,\(0\) 表示静止,\(-1\) 表示下行)
  5. $ state $ :电梯状态(\(0\) 停止,\(1\) 运行)
  6. $ internalRequests $ :内部按键请求队列
  7. $ externalRequests $ :外部呼叫楼层队列
  8. $ externalRequestsDir $ :外部呼叫方向队列(数值 \(1\) 表示 UP、\(-1\) 表示 DOWN)

构造方法为
$ Elevator(minFloor,\ maxFloor) $
用于初始化楼层范围,并将 currentFloor 设为 minFloor,所有队列初始化为空。

Elevator 的公开方法如下:

  1. $ addRequest(request) $
    解析字符串形式的请求,并将合法请求加入相应队列。

  2. $ processRequests() $
    控制电梯依次处理所有内部与外部请求,输出运行过程。

  3. $ activateElevator() $
    当电梯空闲时,根据未处理请求选择初始方向并启动。

Elevator 的私有方法如下:

  1. $ validateFloor(floor) $
    判断 floor 是否在 $ [minFloor,\ maxFloor] $ 范围内。

  2. $ determineInitialDirection() $
    根据所有请求决定电梯首次运行方向。

  3. $ hasRequestAbove(floor) $
    检查是否存在比 floor 更高的请求。

  4. $ hasRequestBelow(floor) $
    检查是否存在比 floor 更低的请求。

  5. $ hasHigherRequest(queue,\ floor) $
    判断队列中是否存在高于 floor 的楼层。

  6. $ hasLowerRequest(queue,\ floor) $
    判断队列中是否存在低于 floor 的楼层。

  7. $ hasPendingRequests() $
    检查是否仍有未完成的请求。

  8. $ shouldStop(floor) $
    判断电梯是否需要在当前层停靠。

  9. $ removeRequestsAtCurrentFloor() $
    删除当前楼层的所有匹配请求。

  10. $ moveOneFloor() $
    按照 direction 移动一层,并输出当前位置与方向。

  11. $ getDirectionString() $
    将方向数值转换为字符串 UP / DOWN / IDLE。

  12. $ checkDirectionChange() $
    根据剩余请求情况实时调整 direction。

类名 $ Main $ 只有一个方法:

$ main(args) $

使用 Scanner 读取电梯楼层范围、用户请求指令,创建 Elevator 对象并调用
$ processRequests() $ 运行整个调度流程。

总结

  • 在这次作业迭代过程中,我深刻体会到了优秀代码设计的重要性。由于我在前期未能充分重视这一方面,我直接采取了面向过程的编程方式,导致最终不得不对代码进行大规模重构以满足新的需求和标准。 尽管这次重构最终帮助我完成了作业,但其中所经历的挑战与曲折让我感到自责与懊悔。
  • 这次经历教会了我许多宝贵的经验教训。首先,预见性是高质量代码设计的关键要素之一,一个良好的设计不仅仅是实现当前的功能要求,还需要考虑未来可能的变化和发展。这就需要我们在编写每一行代码时都要有长远的眼光,思考其在未来维护和扩展中的可能性。
  • 其次,灵活性同样不可或缺。灵活的设计能够使代码更容易适应变化的需求,减少后期调整的成本和风险。最后,我认为更加注重前期的需求分析和架构设计至关重要。这不仅有助于确保代码的可维护性和可扩展性,还可以提高开发效率,降低错误发生的概率。
posted @ 2025-11-17 11:36  cbbdhz  阅读(20)  评论(0)    收藏  举报