电梯调度程序设计题目集学习总结报告

一、前言​
在近段时间的学习旅程中,我陆续完成了三次电梯调度程序设计的题目集挑战。初次接触这类题目时,其复杂的逻辑与要求便让我意识到,这将是一场充满艰辛的编程之旅。由于自身 C 语言基础并不扎实,在转向 Java 进行电梯程序设计学习时,遭遇了诸多阻碍。尽管经过三周的不懈努力,最终仍未能顺利完成这三次实验任务。但回顾这段学习历程,我并非一无所获,反而在多个方面实现了成长与突破。​
通过这三次作业,我从对 Java 语法的一知半解,逐渐掌握了其基本规则与使用方法;从对面向对象编程毫无头绪,到初步构建起设计思维框架;深刻认识到代码具备良好可扩展性的重要意义,也清晰分辨出面向对象编程与面向过程编程的本质差异;理解了单一职责原则对程序架构稳定性和可维护性的关键作用。同时,在使用 IDEA 进行编程实践的过程中,我的代码调试能力得到了显著提升,面对编程难题时,也培养出了更坚韧、更积极的心态。此外,通过实际应用,我熟练掌握了枚举类型在定义电梯运行方向和状态等场景下的运用,并且能够灵活运用 ArrayList 列表进行数据管理与操作。这三次具有递进性质的综合性学习,对我的编程技能和思维方式的提升产生了深远影响。接下来,我将深入剖析学习过程中遇到的问题、解决问题的心路历程以及从中获得的宝贵经验与感悟。​
二、设计与分析​

第一次电梯设计​
第五次作业聚焦于电梯类的设计,该类需要涵盖电梯运行相关的多项关键信息,包括最大楼层数、最小楼层数(默认底层为 1 层)、当前所在楼层,同时还要记录电梯的运行方向、运行状态,以及电梯内部乘客的请求队列和电梯外部不同楼层乘客的请求队列,且电梯外部请求队列需严格区分上行和下行两种情况。此次作业的前两题就涉及到正则表达式的应用要求,然而当时我尚未学习线上课程中关于正则表达式的相关内容,这成为我完成作业的首个重大阻碍。​
面对题目规定的输入格式,我陷入了长时间的思考与探索。输入格式具体为:第一行输入最小电梯楼层数;第二行输入最大电梯楼层数;从第三行起,每行输入代表一个乘客请求,其中电梯内乘客请求格式为<楼层数>,电梯外乘客请求格式为<乘客所在楼层数,乘梯方向>,乘梯方向用UP表示上行,DOWN表示下行(UP、DOWN必须大写),当输入 “end”(不区分大小写)时代表输入结束。起初,我尝试通过构建两个字符串数组列表来存储乘客请求信息,但由于<>符号的存在,以及缺乏提取其中有效信息的方法,始终无法找到可行的解决方案。后来,我了解到正则表达式在处理这类文本格式问题上具有强大功能,便抓紧时间补学了相关课程内容。但由于是初次接触和使用,在实际应用时,只能依照老师提供的源码样例进行模仿。更为关键的是,在整个作业过程中,我更多地停留在脑海中的构思阶段,实际动手编写核心代码的行动较少,这也成为第一次作业未能完成的主要原因,让我深刻认识到编程实践的不可或缺性。​
第二次电梯设计​
第六次题目集是在第五次的基础上进行迭代升级,核心目标是解决第一次设计中电梯类职责过于集中的问题,要求类设计严格遵循单一职责原则(SRP),明确规定程序中必须包含但不限于电梯类、乘客请求类、队列类以及控制类等。汲取了第一次作业的经验教训后,我首先依据题目给出的类图,搭建起了程序的整体框架。在老师提供的源码提示帮助下,顺利实现了输入功能。随后,我开始按照题目要求对各个类中的方法进行编码工作。但由于第一次作业未能完成,很多基础概念和逻辑尚未理清,此次作业对我而言难度依然极大。尽管初步完成了楼层信息的录入,但各个类之间方法的调用关系和数据传递逻辑仍十分模糊。为解决这一问题,我不得不重新回顾第一次电梯设计的内容,从基础概念入手,逐步梳理和理清整体思路。​
第三次电梯设计​
鉴于前两次作业均未取得成功,在这两周的时间里,我对电梯调度相关知识进行了系统的复习与强化学习。在第三次作业中,我成功攻克了许多难题,其中一个关键难点在于请求队列的设计,尤其是 ArrayList 的运用。我在queueRequest类中分别创建了内部请求队列ArrayList internalRequests = new ArrayList<>();和外部请求队列ArrayList externalRequests = new ArrayList<>(); 。​
对代码进行深入分析可知,整个程序代码行数总计 256 行,语句数为 173 行,其中分支语句占比达 16.2%,这表明在整体语句中,条件判断等分支结构语句所占比例相对较低。然而,方法调用语句数量多达 99 条,这反映出代码中各方法之间的调用较为频繁。程序中类和接口总数为 7 个,经计算,平均每个类包含 4.71 个方法,平均每个方法的语句数为 3.58 条。其中,最复杂的方法当属Controller.processRequests(),在该方法中,为实现请求处理功能,调用了大量其他方法,这也从侧面反映出该方法逻辑较为复杂,代码结构存在进一步优化的空间。​
三、采坑心得​
第一次作业​
第一次面对电梯调度程序设计作业时,繁多的题目要求和复杂的程序设计逻辑,让我一时不知所措。基于当时自身的学习状况,我将大量时间用于在脑海中构思程序框架和逻辑流程,而实际动手编写代码的操作却少之又少。这种学习方式导致我无法及时发现构思过程中存在的问题,也无法将理论想法转化为实际可运行的代码。这让我深刻明白,在编程学习过程中,仅仅依靠思考是远远不够的,只有通过不断地动手实践,在实际操作中发现问题、解决问题,才能真正掌握编程技能,实现从理论到实践的跨越。​
第二次作业​
第二次电梯编程作业着重考察对类和方法的掌握程度。由于程序中涉及的类和方法数量众多,在方法调用过程中,我频繁遭遇报错问题。同时,在不同类之间进行数据传递时,方法调用的逻辑也时常出现错误。追根溯源,这主要是因为我对类与类之间的关系、方法的作用域以及参数传递规则理解不够透彻,在设计程序时,未能清晰规划好数据在各个类和方法之间的流动路径,从而导致程序运行时出现各种错误。​
第三次作业​
在第三次电梯编程过程中,我将主要精力投入到处理乘客请求和电梯运行代码的编写上。当代码首次运行时,虽然程序没有出现报错提示,但输出结果与题目要求相差甚远,例如原本设定最高层为 7 层,电梯却运行到了 8 层。经过仔细检查和分析,我删除了开关门操作后的move()方法调用,使得电梯在开关门后先保持静止状态并输出相关信息,从而得到了新的运行结果。经过一系列修改,部分问题得以解决,但又出现了新的状况,在每次电梯开关门前后,都会重复输出当前楼层信息。尽管最后经过再次调整,输出结果看似符合要求,但提交后却显示答案错误。我尝试使用其他测试样例进行测试,发现运行结果依然存在问题。此时我意识到,是程序中处理电梯运行和请求的算法存在根本性错误,需要重新对算法逻辑进行深入分析和优化。​
四、改进建议​
强化基础知识学习​
针对 C 语言基础薄弱对 Java 学习造成的不利影响,我制定了详细的学习计划,计划每天专门安排 1 - 2 小时用于 Java 基础知识的学习与练习。学习重点将聚焦于类与对象、继承、多态等面向对象编程的核心概念,通过阅读专业教材、观看优质教学视频、完成大量练习题等多种方式,逐步弥补知识漏洞,夯实基础,为后续更复杂的编程学习筑牢根基。​
优化代码设计流程​
在今后的编程实践中,我将采用更为科学、系统的代码设计流程。具体而言,在拿到编程任务后,首先对需求进行全面、深入的分析,明确程序需要实现的功能和达到的要求;接着绘制详细的流程图,将程序的逻辑结构和执行流程以可视化的方式呈现出来;然后编写伪代码,用简洁明了的语言描述程序的实现步骤;最后再进行实际代码编写。以电梯调度逻辑为例,在开始编码前,先用纸笔画出乘客请求处理、电梯运行方向判断、楼层移动等各个环节的详细流程图,再将其转化为伪代码,通过这种方式,在编写实际代码前就能梳理清楚逻辑,有效避免因逻辑混乱导致的错误。​
提升代码调试能力​
我将深入学习 IDEA 的断点调试功能,通过在程序关键代码段设置断点,实时观察变量值的变化情况和方法调用顺序,从而精准定位代码中存在的问题。针对第三次作业中开关门重复输出楼层的问题,我会在openDoors()和closeDoors()方法中添加调试输出语句,详细记录每次方法调用时电梯的状态信息,通过逐步排查,找出逻辑错误的根源。同时,建立完善的测试用例文档,全面覆盖正常请求处理、边界值情况(如最低楼层、最高楼层的请求)、异常请求(重复请求、无效楼层请求等)等多种场景,通过全面、细致的测试,确保程序的正确性和稳定性。​
重构代码结构​
针对Controller.processRequests()方法复杂度较高的问题,我将运用 “分而治之” 的策略对其进行重构优化。把复杂的请求处理逻辑拆分成多个功能单一、职责明确的小方法,如determineDirection()用于判断电梯运行方向、shouldStop()用于判断电梯是否应该在某楼层停靠等,并为每个方法添加清晰、详细的注释,说明其功能、输入参数和输出结果。此外,参考设计模式中的 “状态模式”,将电梯的不同运行状态(移动、停止、开门等)封装为独立的类,以此降低代码之间的耦合度,提高代码的可维护性和可扩展性。​
加强学习交流与协作​
我计划主动加入编程学习小组,积极与小组成员分享学习过程中遇到的问题和困惑,同时学习他人解决问题的思路和方法。例如,向成功完成电梯调度作业的同学请教处理外部请求入队逻辑的技巧,借鉴他们的代码结构设计思路。此外,我还会经常浏览 CSDN、Stack Overflow 等技术交流平台,搜索电梯调度相关的技术文章和解决方案,拓宽自己的编程视野,学习行业内的先进经验和优秀实践,不断提升自己的编程能力。​
五、总结​
通过这三次电梯调度程序设计的学习与实践,我深刻体会到编程绝非简单的代码堆砌,而是对逻辑思维能力、问题解决能力以及耐心和毅力的全方位考验。尽管最终未能完全通过测试,但这段充满挑战与挫折的经历却让我收获满满。在技术层面,我从对正则表达式的陌生,到能够运用其处理特定格式的输入数据;从对类设计的模糊认知,到逐步理解并践行单一职责原则,实现了从知识匮乏到初步掌握的跨越。在学习方法上,我深刻认识到动手实践的关键性,每一次编程过程中的报错和调试,都是提升自己的宝贵机会,让我明白只有不断实践、不断反思,才能真正提高编程水平。​
然而,我也清醒地认识到自身存在的不足。一方面,基础知识的不牢固严重制约了学习进度和效率,导致在面对复杂编程任务时常常力不从心;另一方面,缺乏系统性的代码设计思维,在处理问题时容易陷入局部细节,忽视整体逻辑架构,影响了程序的质量和性能。在未来的学习中,我将制定更加细致、更具针对性的学习计划,将复杂的学习任务分解为一个个小目标,逐个击破。同时,我会更加注重代码规范,养成编写详细注释和全面测试用例的良好习惯,不断提高代码的质量和可读性。​
对于课程学习,我希望老师在布置作业时,能够为基础薄弱的同学提供更多分步骤的引导和提示。比如在电梯调度作业中,可以先给出一个简化版的类设计框架和实现思路,帮助我们逐步上手,降低学习难度,增强学习信心。另外,建议增加代码互评环节,通过互相分析和讨论代码,学习不同的编程思路和实现方法,从他人的代码中汲取经验,进一步提升编程能力。这段充满挫折与成长的学习经历,不仅让我积累了宝贵的经验,更坚定了我攻克编程难题的决心。我相信,只要保持积极的学习态度,坚持不懈地努力,不断总结经验教训,就一定能够在编程领域取得更大的进步,跨越一个又一个技术难关。​

posted @ 2025-04-20 18:35  温锐甲  阅读(37)  评论(0)    收藏  举报