第一次Blog作业
一前言
在学习了一个月的Java后,也是迎来了一个小项目,整体来说,电梯运行模拟题难度不高,但是有许多陷阱,其次就是刚开始对运行规则的不理解,经常导致运行超时,但也正因为如此,让我一直不断学习,虽然我没写出来但是我有许多踩坑和心得分享。
二、设计与分析
题目概述:
设计一个电梯类,具体包含电梯的最大楼层数、最小楼层数(默认为1层)当前楼层、运行方向、运行状态,以及电梯内部乘客的请求队列和电梯外部楼层乘客的请求队列,其中,电梯外部请求队列需要区分上行和下行。电梯运行规则如下:电梯默认停留在 1 层,状态为静止,当有乘客对电梯发起请求时,电梯开始移动,当电梯向某个方向移动时,优先处理同方向的请求,当同方向的请求均被处理完毕然后再处理相反方向的请求。电梯运行过程中的状态包括停止、移动中、开门、关门等状态。当电梯停止时,如果有新的请求,就根据请求的方向或位置决定移动方向。电梯在运行到某一楼层时,检查当前是否有请求,然后据此决定移动方向。每次移动一个楼层,检查是否有需要停靠的请求,如果有,则开门,处理该楼层的请求,然后关门继续移动。使用键盘模拟输入乘客的请求,此时要注意处理无效请求情况,例如无效楼层请求,比如超过大楼的最高或最低楼层。
还需要考虑电梯的空闲状态,当没有请求时,电梯停留在当前楼层。
输入格式:
第一行输入最小电梯楼层数。
第二行输入最大电梯楼层数。
从第三行开始每行输入代表一个乘客请求。
电梯内乘客请求格式:<楼层数>
电梯外乘客请求格式:<乘客所在楼层数,乘梯方向>,其中,乘梯方向用UP代表上行,用DOWN代表下行(UP、DOWN必须大写)。
当输入“end”时代表输入结束(end不区分大小写)。
输出格式:
模拟电梯的运行过程,输出方式如下:
运行到某一楼层(不需要停留开门),输出一行文本:
Current Floor: 楼层数 Direction: 方向
运行到某一楼层(需要停留开门)输出两行文本:
Open Door # Floor 楼层数
Close Door
输入样例:
1
20
❤️,UP>
<5>
<6,DOWN>
<7>
<3>
end
输出样例:
Current Floor: 1 Direction: UP
Current Floor: 2 Direction: UP
Current Floor: 3 Direction: UP
Open Door # Floor 3
Close Door
Current Floor: 4 Direction: UP
Current Floor: 5 Direction: UP
Open Door # Floor 5
Close Door
Current Floor: 6 Direction: UP
Current Floor: 7 Direction: UP
Open Door # Floor 7
Close Door
Current Floor: 6 Direction: DOWN
Open Door # Floor 6
Close Door
Current Floor: 5 Direction: DOWN
Current Floor: 4 Direction: DOWN
Current Floor: 3 Direction: DOWN
Open Door # Floor 3
Close Door
分析设计:
一开始没理解运行逻辑,想着用3个数组来模拟队列,一个数组来记录内部请求,一个数组来记录外部向上请求,一个数组来记录外部向下请求,通过检查每个数组首元素是否有当前楼层的请求来确认是否需要让电梯停下来,代码写完后无法得到对应结果,通过和同学的交流发现运行逻辑出错,再请教同学后,使用2个数组来记录请求,一个用来内部请求,一个用来记录外部请求。
三、踩坑心得和教训;
通过这次的踩坑,让我明白不用过早地开始编写代码,先根据自己的想法模拟出运行结果,然后开始编写,写代码并不痛苦,改代码最痛苦。所以一定要审清题目理解题目的要求其次不要孤军奋战要和同学讨论,和他们想法对比,这样才不容易踩坑,同时也从别人视角感受了不同的思维方式。虽然我这次没有写出来但是我也学会了很多东西,学会和同学们讨论,学会代码的编写,还有类和类之间的关系设计和队列中某些函数的使用,正则表达式的运用,类与对象的关系等等等等,也让我对后面的JAVA学习更加期待。
四、总结
通过对电梯模拟系统代码的学习和优化过程,我获得了许多宝贵的编程经验和知识。这些经验不仅加深了我对数据结构、算法优化、代码组织等核心编程概念的理解,还让我认识到在软件开发中遵循良好实践的重要性。因为我们这个专业就是和生活相接轨,相对应,不断完善算法逻辑满足人类的生活需求。