第一次Blog作业-电梯调度

前言:
在这几次的作业中,我仿佛置身于一个充满挑战的编程迷宫,每一次作业都是一道独特的关卡。从单部电梯调度程序的初次尝试,到不断迭代优化,涉及的知识点如同繁星点点,逐渐织成一张复杂而有序的知识网络。题量虽不算庞大,但每一道题都像是一座需要精心攻克的堡垒,难度也随着作业的推进逐步攀升,从最初的似懂非懂,到后来需要绞尽脑汁去理清逻辑,每一步都充满了挑战与收获。

设计与分析:
(1)第五次PTA作业:7 - 5 NCHU_单部电梯调度程序

拿到这道题时,就像是接到了一个神秘的任务,要设计一个电梯类,包含各种属性和运行规则。我先在脑海里勾勒出电梯的基本轮廓:它有最大楼层数、最小楼层数,初始停在1层,状态静止。就像一个待命的小卫士,等待着乘客的召唤。

在编写代码时,我按照题目要求,定义了电梯类的各个属性,如当前楼层、运行方向、运行状态等,还创建了电梯内部和外部乘客的请求队列。为了实现电梯的运行规则,我编写了一系列方法。比如,当有乘客请求时,电梯要开始移动,并且优先处理同方向的请求。这就像是在规划一条最优路线,让电梯高效地完成任务。

我使用if - else语句来判断电梯的运行方向和请求情况。当电梯处于静止状态,有新请求时,根据请求方向决定移动方向;在移动过程中,每到一层就检查是否有需要停靠的请求。为了模拟输入,我使用了Scanner类从键盘读取乘客请求,并对无效请求进行处理。

在测试过程中,我发现有时候电梯的运行逻辑会出现一些小偏差。比如,在处理多个连续请求时,偶尔会出现顺序错乱的情况。这让我意识到,代码的逻辑还不够严谨。我重新审视了代码,仔细检查了请求队列的处理逻辑,发现是在判断请求方向和优先级时,条件判断不够细致。经过一番调整,电梯的运行逻辑终于更加符合预期了。通过这次作业,我对类的设计和对象的行为有了更深刻的理解,也学会了如何用代码去模拟现实世界中的复杂规则。

(2)第六次PTA作业:7 - 3 NCHU_单部电梯调度程序(类设计)

这次作业是对之前电梯调度程序的迭代性设计,要求遵循单一职责原则。这就像是给我的代码来了一次“大改造”,要把不同的功能拆分到不同的类中,让每个类都专注于自己的任务。

我仔细研究了题目给出的类图,开始着手设计电梯类、乘客请求类、队列类和控制类。电梯类依然负责管理电梯的基本属性和状态,比如当前楼层、运行方向、运行状态等。乘客请求类则专门用来处理乘客的请求信息,包括请求楼层和请求方向。队列类负责管理乘客请求队列,实现请求的入队和出队操作。控制类就像是一个指挥官,协调各个类之间的工作,根据电梯的状态和请求队列来决定电梯的运行策略。

在编写代码的过程中,我遇到了一些困难。比如,如何在不同类之间进行有效的数据传递和交互,是一个需要仔细思考的问题。我通过定义合适的方法和属性,以及使用参数传递的方式,解决了这个问题。在测试时,我发现运行结果与预期结果不一致,楼层顺序不同。经过一番排查,我发现是在处理请求队列时,对请求的优先级判断出现了问题。我重新梳理了逻辑,对请求的优先级判断进行了优化,最终让电梯的运行结果符合了预期。这次作业让我更加深入地理解了面向对象编程的思想,学会了如何通过合理的类设计来提高代码的可读性和可维护性。

(3)第七次PTA作业:7 - 3 NCHU_单部电梯调度程序(类设计 - 迭代)

这一次,作业又有了新的变化,加入了乘客类,取消了乘客请求类,并且对外部请求的格式进行了修改。这就像是给我的编程之旅又增加了新的挑战关卡。

我重新设计了类结构,乘客类用来存储乘客的信息,包括请求源楼层和请求目的楼层。电梯类、队列类和控制类也根据新的需求进行了调整。在处理外部请求时,按照题目要求,当电梯处理完外部请求后,要把请求目的楼层加入到请求内部队列。

在编写代码时,我遇到了一个严重的问题:结果运行超时。这让我十分苦恼,就像是赛车在赛道上突然抛锚了一样。我开始排查问题,首先检查了循环和条件判断语句,看看是否存在不必要的重复计算。我发现,在处理请求队列时,每次查找和处理请求的时间复杂度较高。于是,我尝试优化算法,使用更高效的数据结构来存储和处理请求队列。比如,将原来的线性查找改为二分查找,提高了查找效率。经过一番努力,终于解决了运行超时的问题。这次作业让我深刻体会到了算法优化的重要性,也锻炼了我解决复杂问题的能力。

采坑心得:
在这三次作业中,我踩过不少坑,每一个坑都像是一次深刻的教训,让我不断成长。

第五次作业时,我对电梯运行逻辑的理解还不够深入,导致在处理多个请求时出现逻辑混乱。这让我明白,在编写代码之前,一定要把问题的逻辑梳理清楚,多在纸上画画流程图,这样可以避免很多不必要的错误。

第六次作业,运行结果与预期不符的问题,主要是因为对类之间的交互和数据传递理解不够到位。我意识到,在面向对象编程中,类与类之间的协作非常重要,要仔细设计类的接口和方法,确保数据能够正确传递和处理。

第七次作业的运行超时问题,让我深刻认识到算法和数据结构的重要性。在处理大规模数据或复杂逻辑时,选择合适的算法和数据结构可以大大提高程序的效率。不能仅仅满足于代码能够实现基本功能,还要追求更高的性能。

每一次踩坑后,我都会把问题记录下来,分析原因,总结经验。这些经验就像是我编程道路上的宝贵财富,让我在以后的编程中更加谨慎和自信。

改进建议:
对于这些电梯调度程序题目,我认为可以从以下几个方面进行改进。

在代码结构方面,虽然我们已经按照面向对象的思想进行了类的设计,但还可以进一步优化。比如,可以增加一些注释,对每个类和方法的功能进行详细说明,这样不仅方便自己日后查看代码,也方便其他同学阅读和理解。另外,可以考虑使用设计模式来进一步提高代码的可维护性和扩展性。比如,在控制类中,可以使用策略模式来实现不同的电梯调度策略,这样当需求发生变化时,只需要修改相应的策略类,而不需要对整个控制类进行大改。

在算法优化方面,我们可以继续探索更高效的算法来处理请求队列。比如,可以使用优先队列来管理乘客请求,根据请求的优先级自动排序,这样可以进一步提高电梯的运行效率。同时,在处理无效请求和重复请求时,可以使用更简洁的方法,减少代码的冗余度。

在测试方面,我们可以编写更多的测试用例,覆盖各种边界情况和异常情况。比如,测试电梯在最高楼层和最低楼层时的运行情况,测试同时有大量内部请求和外部请求时的处理情况等。通过全面的测试,可以及时发现代码中的潜在问题,提高代码的质量。

总结:
通过这三次关于电梯调度程序的作业,我收获颇丰。在知识层面,我深入学习了面向对象编程的思想,掌握了类的设计、对象的交互以及如何用代码模拟现实世界中的复杂规则。我学会了如何定义类的属性和方法,如何处理对象之间的数据传递和协作。同时,我也对算法和数据结构有了更深刻的认识,明白了选择合适的算法和数据结构对程序性能的重要性。

在技能方面,我的编程能力得到了很大的提升。从最初面对复杂问题时的手足无措,到现在能够逐步分析问题、设计解决方案并通过代码实现,这是一个巨大的进步。我学会了如何调试代码,如何排查和解决程序中出现的各种问题。每一次解决问题的过程,都像是在攻克一座堡垒,让我积累了宝贵的经验。

然而,我也清楚地认识到自己还有很多不足之处。在算法设计方面,我还不够熟练,对于一些复杂的算法,理解和应用还存在困难。在代码的优化方面,我还需要进一步学习如何写出更高效、更简洁的代码。在面对一些复杂的需求时,我的分析和设计能力还有待提高。

对于教师、课程、作业、实验、课上及课下组织方式等方面,我也有一些建议。希望老师在讲解知识点时,可以多结合一些实际的案例,让我们更容易理解和掌握。在课程安排上,可以增加一些实践环节,让我们有更多的机会动手操作,巩固所学的知识。对于作业和实验,可以提供更多的指导和反馈,帮助我们及时发现问题并改进。

这次的作业之旅,虽然充满了挑战和困难,但也让我收获了知识和成长。我相信,在未来的学习中,我会继续努力,不断克服自己的不足,在编程的道路上越走越远。

posted @ 2025-04-20 21:44  soShy  阅读(31)  评论(0)    收藏  举报