三次电梯问题小结
一.前言
经历了不到一个月的学习,学了对象和类,继承,抽象类,单一职责原则和一些基本语法,但是面对电梯问题还是感到非常棘手,三次电梯问题没有一次能完美通过,总是有或多或少的问题,即便是请教了老师和同学,自己再动手时还是错误频出。对正则表达式,ArrayList 和 LinkedList都不甚了解,在做题后也是随做随学,错误百出
二.代码设计分析
1.第一次电梯问题
题面如下:

类设计如下:

结果如下:

踩坑心得:
- 第一次写大作业由于之前拉下太多,导致很多题目要求看得并不是太懂,尤其是尖括号数据无法读取
- 使用for循环与if语句读取尖括号数据只能读取特殊情况,其他情况均无法正确处理
- end不区分大小写必须用compareto而不能用百分百匹配的equal方法
- 尖括号数据用正则表达式分组提取后,一次性只能输入一个数据,要用while循环输入
- 正则表达式提取数据,如果数据类型不是一个,要在while中再次调用find方法
- main方法复杂度过高,且没有遵守单一职责原则,导致错误信息无法排除,找错难度过高
2.第二电梯问题
题面如下:

类设计如下:

结果如下:

踩坑心得:
- Integer与枚举Direction实际上都是对象,对于它们的调用不能参照变量,需要包装
- Listlink是链表,不能使用for加下标方法获取,而AraayList与list是线性表,可以用下标读取,但要用get方法才能读取
- 用for循环加if无法过滤多余数据,导致报错
- 对电梯算法不熟悉,在外部请求与内部请求重合时会开两次门
第三次电梯问题:
题面如下:

类设计如下:

结果如下:

踩坑心得:
- 控制类嵌套太深,getNextFloor()与getDirection()方法反复互相调用,用时过长
- 内部队列和外部队列无法判断谁先谁后,总是要在内部队列全部弹出后才能加入第二个外部队列
- 电梯算法中的多线程问题无法处理,当同时存在一上一下距离相同的需求时会出现每一层都停留的情况
- 无法准确获取当前楼层的方向,在到达顶楼或者是底层时会出现越界后才能获取方向
三.总结
- 基础薄弱:对正则表达式,队列等概念理解模糊,无法独立写简单逻辑。
- 缺乏实践:学完理论后很少写代码,一动手就卡壳,依赖复制粘贴。
- 对于多线程问题接触太少,无法有效判断该进行哪一个线程
- 单一职责原则理解不够,在反复嵌套中加深了调错难度和运行时间
- 队列算法学得很差,不能将队列弹出和加入
- Arraylist和list也不会运用,对于用list线性表对数据的存储和输出不能实现
四.改进
- 编程是技能型学科,需大量练习才能熟练
- 先实现功能,再优化代码
- 找到内在动力,用编程解决实际问题
- 制定每日计划
- 学会调试和查错,遇到错误先自己分析

浙公网安备 33010602011771号