电梯迭代第一次Blog作业总结

一、前言
在这最近一阶段的学习中,我总共经历了三次关于电梯调度程序设计的题目集。第一次见到电梯难题时,我就意识到我即将面临一项艰巨的任务,果然不出所料,经过三周的学习,由于我的c语言基础并不是很好,即使在我的努力下我最终还是没能完成这三次电梯实验。但是通过5-7这三次题目集的训练,我也并不是一无所获,还是学到了很多知识:熟悉了Java基本语法;初步建立起了面向对象的设计思路;认识到了代码可拓展性的重要;初步了解面向对象编程与面向过程编程的区别;认识到单一职责对程序的重要性;进一步练习了利用IDEA进行改错;强化了面对问题解决问题心态。并且经过联系我也能够熟练地使用枚举类型,例如电梯中的方向Direction和状态State使用了枚举类型,而且也使我学会了使用ArrayList列表。这三次的迭代型综合性学习,总体来说还是使我受益匪浅。接下来请让我详细讲述一下我所存在的问题,心历路程及感悟。
二、设计与分析
1.第一次电梯设计:
在第五次电梯作业中要求设计一个电梯类,在此类中,具体包含电梯的最大楼层数、最小楼层数(默认为1层)当前楼层、运行方向、运行状态,以及电梯内部乘客的请求队列和电梯外部楼层乘客的请求队列,其中,电梯外部请求队列需要区分上行和下行。其实在第五次题目集的前两题中就要求使用正则表达式,但我当时并未学习线上课程关于正则表达式的内容,因此第一次电梯难题我从一开始的输入问题就开始卡壳,这也是我第一次未能完成的一个重要原因。
输入格式:
第一行输入最小电梯楼层数。
第二行输入最大电梯楼层数。
从第三行开始每行输入代表一个乘客请求。

电梯内乘客请求格式:<楼层数>
电梯外乘客请求格式:<乘客所在楼层数,乘梯方向>,其中,乘梯方向用UP代表上行,用DOWN代表下行(UP、DOWN必须大写)。
当输入“end”时代表输入结束(end不区分大小写)。
上述部分是题目要求的输入格式,而我最开始,一直在思考试图建立两个字符串数组列表,但是犹豫<>的存在,以及提取<>里面的信息我又思考了良久,最终还是没能做出来,后来我学习了解到了正则表达式,而且也知道了正则表达式有着强大的威力,于是我补学了正则表达式,但由于初学,还是在老师给的源码样例下照葫芦画瓢使用的。但第一次主要是在脑子中构思,并未动手实际写主题代码,这也是第一次作业未完成的主要原因。由此我也深刻的意识到动手的重要性。
2.第二次电梯设计:
第六次题目集的电梯迭代是在第一次题目集的基础上进行迭代型设计,目的为解决电梯类职责过多的问题,类设计要求遵循单一职责原则(SRP),要求必须包含但不限于设计电梯类、乘客请求类、队列类以及控制类,吸取了第一次电梯设计的经验,这次我按照题目给出的类图,首先写出了程序的整体框架
类图

由于吸取了第一次的经验,以及加上老师所给的源码提示,我也是成功的实现了内容的输入,于是我开始按照题目要求开始对各个类中的方法开始编码,但毕竟第一次电梯没有做出来,难度对于我来说还是比较大的,尽管我初步搞定了楼层的录入,但各个方法之间的联系还是不够清晰,于是我开始回到第一次电梯慢慢开始理清思路。
3.第三次电梯设计:
因为前两次的题目我都未做出,此次也由于电梯设计题目进入第三周,我经过两周的沉淀,并且在电梯难题的压迫下,我也是加工补习了关于电梯难题所需要用到的相关知识,在此次,我成功的解决了大部分问题(主要难题在于我的队列请求设计尤其是关于ArrayList方面,通过在queueRequest类中建立了内部请求:ArrayListinternalRequests=new ArrayList<>();和外部请求:ArrayListexternalRequests=new ArrayList<>();)


代码行数为256行,语句数共有173行,分支语句占比 16.2% ,说明代码中条件判断等分支结构语句在整体语句中所占比例为 16.2% 。这个比列相对来说还是比较低的,但是我的方法调用语句有 99 条 ,反映代码中方法之间的调用比较频繁类和接口数量共 7 个 。平均每个类的方法数为 4.71 个 。平均每个方法的语句数是 3.58 条 。最复杂的方法是 Controller.processRequests() ,在此方法中我调用了大量的方法通过处理请求,但也从侧面反映该方法可能包含较为复杂的逻辑,代码结构可能不够简洁。
三、采坑心得
1.第一次作业
由于第一次面对大量的题目要求和较为复杂的程序设计,根据我的学习状况,我在第一次时主要是在脑子中构思,对于实际下手敲代码的部分很少,我觉得这是最主要的原因,任何事情光凭空想是不行的,最重要的是实践。
2.第二次作业
第二次电梯编程中,由于此次题目主要考察学生的类和方法掌握程度,并且类和方法过多,导致我在调用过程中出现大量报错,并且在数据的传递之间关于方法的调用也是频繁出错
3.第三次作业
在第三次电梯编程时,我主要开始编写处理请求和运行的代码,代码第一次运行成功但是结果与要求相差甚远(最高层应是7层却上到了八层),经过修改我删除了开关门后的move();使开关门以后先不移动再次输出,出现以下结果

经过修改,其他问题解决,但是在每次开关门前后会输出两次当前楼层,最后我修改虽正确输出相应结果但显示答案错误,我再次使用其他测试样例,运行结果再次出错,我明白是我的算法出了错误。
四、改进建议
1.加强基础知识学习
针对 C 语言基础薄弱导致 Java 学习困难的问题,我计划每天抽出 1-2 小时的在线练习,重点补足 Java 语法短板,特别是类与对象、继承、多态等面向对象编程核心概念。
优化代码设计流程
在后续编程中,采用 “需求分析→绘制流程图→编写伪代码→实现代码” 的四步流程。例如,在处理电梯调度逻辑前,先用纸笔画出请求处理、方向判断、楼层移动的详细流程图,再将其转化为伪代码,避免直接编写代码导致的逻辑混乱。
提升代码调试能力
学习使用 IDEA 的断点调试功能,在关键代码段设置断点,观察变量值和方法调用顺序。针对开关门重复输出楼层的问题,可在openDoors()和closeDoors()方法中添加调试输出,记录每次调用时的电梯状态,逐步定位逻辑错误。同时,建立测试用例文档,覆盖正常请求、边界值(如最低 / 最高楼层)、异常请求(重复请求、无效楼层)等场景。
重构代码结构
针对Controller.processRequests()方法复杂度高的问题,采用 “分而治之” 策略:将请求处理逻辑拆分为determineDirection()、shouldStop()等更小的方法,并为每个方法添加清晰的注释说明功能。参考设计模式中的 “状态模式”,将电梯的不同状态(移动、停止、开门)封装为独立类,降低代码耦合度。
强化团队协作与交流
主动加入学习小组,分享遇到的问题并学习他人解决方案。例如,向完成作业的同学请教如何处理外部请求入队逻辑,借鉴其代码结构设计思路。同时,在 CSDN、Stack Overflow 等平台搜索电梯调度相关技术文章,拓宽编程视野。
五、总结
通过这三次电梯调度程序设计的挑战,我深刻体会到编程不仅是代码的堆砌,更是逻辑思维与问题解决能力的综合体现。虽然最终未能完全通过测试,但这段经历让我收获颇丰:在技术层面,我从最初对正则表达式的陌生,到能够运用其处理输入格式;从对类设计的模糊认知,到逐步理解单一职责原则的重要性。在学习方法上,我意识到动手实践的关键性,空想 100 遍不如敲代码 1 遍,每一次调试报错都是提升的机会。
然而,我也清晰认识到自身不足:一是基础知识不扎实导致学习效率低下,二是缺乏系统性的代码设计思维,容易陷入细节而忽略整体逻辑。未来,我计划制定更细致的学习计划,将复杂问题拆解为小目标逐个突破;同时,加强代码规范意识,养成编写注释、测试用例的好习惯。
对于课程学习,我建议老师在发布作业时提供更多分步引导,例如针对电梯调度问题,可先给出简化版的类设计框架,帮助基础薄弱的同学逐步上手。希望能增加代码互评环节,通过分析他人代码学习不同的实现思路。这段充满挫折与成长的学习经历,让我更加坚定了攻克编程难题的决心,我相信只要保持耐心与韧性,终能跨越技术难关。

posted @ 2025-04-20 17:40  七677  阅读(49)  评论(0)    收藏  举报