第一次BLOG作业
前言
很抱歉我的电梯程序并没有完成。下面我分析一下自己在完成本轮迭代编程作业存在的问题、心理路程和感悟。
设计与分析
首先是各个题目的知识点:
题目一:
电梯类的属性设计:
电梯的最小楼层数和最大楼层数,用于限制电梯的运行范围。
当前楼层、运行方向、运行状态(如静止、移动中、开门、关门等)。
电梯内部乘客请求队列和外部楼层乘客请求队列,其中外部请求需要区分上行和下行。
电梯调度算法:
优先级处理:电梯优先处理同方向的请求,当同方向的请求处理完毕后,再处理反方向的请求。
顺路请求:电梯在运行过程中,会优先处理顺路的请求,即当前楼层与目标楼层方向一致的请求。
请求排序:根据请求的方向和距离,计算请求权值,优先响应距离最近的请求
。
状态管理:
电梯的状态包括静止、移动、开门、关门等状态。当电梯到达某一层楼时,会根据是否有请求决定是否开门。
电梯在空闲时会停留在当前楼层,等待新的请求。
输入输出处理:
输入格式:第一行是最小楼层,第二行是最大楼层,之后每行输入一个乘客请求,直到输入“end”结束。
输出格式:根据电梯运行情况,输出每一步的运行状态(如当前楼层、方向)和开门操作。
队列管理:
使用优先级队列管理电梯的请求,分别存储上行和下行的请求,以确保优先处理顺路和最近的请求。
异常处理:
处理无效请求(如超过最大或最小楼层的请求)。
确保电梯在运行过程中不会出现重复停留或无效操作。
题目二:
对于题目一来说题目二多了一些要求:对之前电梯调度程序进行迭代性设计,目的为解决电梯类职责过多的问题,类设计要求遵循单一职责原则(SRP)。
电梯运行规则与前阶段单类设计相同,但要处理如下情况:
乘客请求楼层数有误,具体为高于最高楼层数或低于最低楼层数,处理方法:程序自动忽略此类输入,继续执行
乘客请求不合理,具体为输入时出现连续的相同请求,例如<3><3><3>或者<5,DOWN><5,DOWN>,处理方法:程序自动忽略相同的多余输入,继续执行,例如<3><3><3>过滤为<3>。
题目二要求的可维护性 可扩展性 可读性 健壮性 复用性 比题目一高。 还给出了详细的类图:
这个类图解释了各个类的关系:
关联关系:例如,Controller 类关联了 Elevator 和 RequestQueue 类,表示控制器需要管理电梯和请求队列。
组合关系:例如,RequestQueue 类包含了 internalRequests 和 externalRequests 两个 LinkedList,表示请求队列由内部请求和外部请求组成。
题目三:
此题又加入了乘客类(Passenger),取消乘客请求类。

电梯运行规则与前阶段相同,但有如下变动情况:
乘客请求输入变动情况:外部请求由之前的<请求楼层数,请求方向>修改为<请求源楼层,请求目的楼层>
对于外部请求,当电梯处理该请求之后(该请求出队),要将<请求源楼层,请求目的楼层>中的请求目的楼层加入到请求内部队列(加到队尾)
功能也有了调整:
外部请求格式调整
外部请求:由之前的 <请求楼层数, 请求方向> 修改为 <请求源楼层, 请求目的楼层>。这意味着外部请求不再直接指定电梯的移动方向,而是由乘客的源楼层和目的楼层决定。
请求处理逻辑调整
请求处理:当电梯处理完一个外部请求后,需要将请求的目的楼层加入到内部请求队列中。这要求在 Controller 类中增加相应的逻辑,确保外部请求处理完毕后,目的楼层能够正确地加入到内部请求队列。
输入和输出格式调整
输入格式:输入格式调整为第一行输入最小电梯楼层数,第二行输入最大电梯楼层数,从第三行开始每行输入代表一个乘客请求。电梯内乘客请求格式为 <楼层数>,电梯外乘客请求格式为 <请求源楼层, 请求目的楼层>。
输出格式:模拟电梯的运行过程,输出当前楼层和方向,当需要停留开门时,输出开门和关门的信息。
存在问题:
理解类图和设计模式
问题:对类图中的各种符号和关系不熟悉,难以理解类之间的关联和职责划分。
解决方法:多学习UML类图的基本符号和关系,理解单一职责原则(SRP)、组合、关联等设计模式。可以通过阅读相关书籍、教程和实践来提高理解能力。
枚举类型(Enum)的使用
问题:不熟悉枚举类型的定义和使用,不知道如何在程序中使用枚举类型来表示状态和方向。
解决方法:学习Java中枚举类型的定义和使用方法,理解枚举类型的优势和应用场景。
方法的实现
问题:不知道如何实现类中的方法,特别是涉及到逻辑判断和数据处理的方法。
解决方法:通过阅读题目要求和类图,理解每个方法的功能和输入输出,逐步实现方法的逻辑。可以先从简单的getter和setter方法开始,再逐步实现复杂的逻辑方法。
调试和测试
问题:不知道如何调试和测试程序,难以发现和修复程序中的错误。
解决方法:学习使用IDE(如IntelliJ IDEA、Eclipse等)中的调试工具,通过设置断点、单步执行等方法来调试程序。编写测试用例来验证程序的正确性。
代码规范和注释
问题:不重视代码规范和注释,导致代码可读性和可维护性差。
解决方法:学习和遵守Java的代码规范,编写清晰、简洁的代码。为代码添加注释,说明每个类、方法的功能和实现逻辑。
总之就是对于java的了解不够多,许多基础的知识、语法、还有各种构造方法、很多特殊用法我都不会,缺乏基础知识是我最大的问题。
心理路程:
刚开始看到这种题目时,我第一时间怀疑自己是否看错了,最后只好硬着头皮做。
可是我发现自己好像什么都不会,根本看不懂题目各种各样的要求,于是我去找了一些课程看并且去网上查找相关的知识。
看到复杂的类图和大量的类、方法、属性时,我会感到困惑和迷茫,不知道从哪里开始。
于是我先从整体上理解类图的结构和各个类之间的关系,再逐步深入每个类的细节。先阅读题目的要求和输入输出格式,理解程序的功能和逻辑。
我又担心自己无法完成题目,导致焦虑和紧张。
我尽量保持冷静和自信,相信自己能够完成题目。可以先从简单的部分开始,逐步完成整个程序。认真思考和分析题目要求和类图,理解每个类的功能和职责,思考如何实现类中的方法和逻辑。
后面我根据自己的理解和分析,尝试编写代码,实现类和方法的功能。在编写代码的过程中,我遇到各种问题和错误,要不断调试和修改。
可惜最后我还是没有完成题目。
感悟:
通过类图可以清晰地看到各个类之间的关系和职责划分,有助于理解程序的整体结构和逻辑。类图中的每个类、属性、方法和关系都有其特定的含义和作用,需要仔细阅读和理解。
我要去学习类图并且学会自己画出类图。
还有对于java的基础知识的学习,我认为这是我最缺少的,也是最重要的。
同时坚持不懈的精神也很重要,在做这些题目时我总是会想到放弃,这是一个必须改变的坏处。
总结:
通过题目,我提高了对Java编程的理解和掌握,解决在处理复杂类设计题目时遇到的问题,培养解决问题的能力和编程思维。同时,也强调了单一职责原则和控制类的设计思想,要求每个类只负责其特定的职责,控制类专门负责电梯调度过程,符合类设计要求才能得分。这有助于我在以后的学习和工作中,更好地理解和应用面向对象编程的思想和方法,提高编程的能力和水平。
不足的是,题目的测试点少了点,有时我不知道自己哪里出了错误 。

浙公网安备 33010602011771号