本次大作业是第一个面向对象编程的实操练习,难度从中到难,层层递进。
由于能力上的不足等原因,有关单部电梯调度的程序未能成功调通(或未完成),故在此主要分析我代码上的缺陷不足和问题所在。

首先,编译并运行之后显而易见的出现了错误:运行时错误,会一直循环打印,并且楼层数量始终为0,显然出现了很多逻辑错误。
这边是用ai工具分析的情况:
逻辑混乱
在Main类中,使用字符串长度(input.length()>=3&&input.length())来区分内部和外部请求不可靠。例如,外部请求长度为7,会被错误分类;内部请求如100(3字符)可能被误判为外部请求。
改进建议:最好使用正则表达式或解析请求内容来区分类型
数据封装不足,违反OOP原则
Elevator类的字段(如IQ、OQ)被声明为public,并在Main类中直接访问(例如elevator.OQ.add(input)),破坏了封装性。
改进建议:将字段设为private,并通过公共方法(addRequest(String request))来添加请求,内部根据请求类型自动分类


报告显示:
代码质量指标:
复杂度问题:

由于时间问题,我并没有完成最后的代码,因此以下是使用ai工具分析其他代码部分的结果:
调度算法逻辑问题
在hasRequestsInDirection方法中,条件elevator.getCurrentFloor() == req.getFloor()可能逻辑不正确,电梯当前楼层等于请求楼层时应该直接处理
方法复杂度依然偏高
determineDirection()和hasRequestsInDirection()`方法逻辑较复杂。
缺少输入解析层


报告显示:
代码质量指标:
复杂度问题:

shouldStop和removeRequests中重复了相似的方向检查逻辑。

报告显示:
代码质量指标:
复杂度问题:
第一次设计最大的问题就是逻辑混乱复杂,所有功能都往一个类装,调度逻辑、状态管理、队列处理混杂在一起。
第二次有了参考类图设计,结构方面稍微改善了点,但由于第一次未能打好基础,所以第二次也没有成功写出完整的程序。
第三次终于能正常运行了,但依然存在答案错误,未通过测试点的问题,这说明我在新增功能时没有同步增加测试,而且嵌套深度过深,条件判断过于复杂了。
随着程序的复杂度上升,应在注释方面多注意,方便未来调试。
可以针对架构设计、复杂度控制等方面进行改进,详细的前面已注明,不再多说。
通过本阶段的练习,我能够学会如何设计类以及合理进行职责划分,并且能从只关注功能到关注复杂度、覆盖率,学习了迭代优化思维,能够通过持续重构改善代码质量。
登录查看全部
参与评论
手机查看
返回顶部