第一次作业:
度量图:
虽然说对oo这门课早有耳闻,但实际上只有自己上了才知道。由于自己以前没有学过java,也没有面向对象的思维。无奈,花了一天自学了java的基础语法以及一些基本的编程规范。但是第一次作业的实战就暴露出匆忙学习的后果。首先就是正则表达式的匹配识别,自己一开始的确想到了单个识别,即把每个多项式拆开进行识别匹配,这的确是个不错的方法,所以我并没有遇到正则爆栈的情况,但是我却在如何分,以及分后识别出了问题,对Pattern和Matcher类不熟悉,导致程序并不能完全识别所有非法输入,在其后的公测互测中也体现出来了。这次作业给我的java编程入了个门,我充分吸取了教训,并期待在下次作业不在重犯。
第一次拿到别人的代码,也不太会调试,看了看程序,跑了一下自己构造的数据,过了,然后仔分析别人的代码相当简洁,而且面向对象的思想十分清晰,我认真学习了大佬的代码,决定用于下一次作业中。
第二次作业:
度量图
类图
这次作业对我来说仍不算轻松吧,虽说有了上一次经验,这一次写起来倒不是很模糊,但这次的指导书是我第一次见到这么长的,我花了很久阅读指导书。因为明确要求实现五个类,我的思想就是电梯类负责电梯请求以及电梯的输出,楼梯类负责楼梯请求,请求类负责是别两个来源的请求是否合法,请求队列则是专门存放合法请求,调度器类就是对请求队列里的请求进行调度输出。
这次作业,整体实现调度并不复杂,但是判断同质还是花了我好一番功夫,我用的笨办法,就是把所有的合法请求的信息记录下来,用for循环判断是否有同质的请求,我在for循环里从后往前找,可能节约了一部分时间吧。
这次作业我犯了一个可能没有人会犯的错误,因为指导书说不与实际电梯一致,我就只看了指导书的例子,没有进行分析,我以为只有STILL状态才需要开关门一次,其他的没有考虑开关门的一秒。由于这个问题导致公测直接错了很多。
第三次作业:
度量图
类图
这次作业大抵是咋上一次上进行添加功能,听起来简单,可到了实际分析时才发现非常的复杂,捎带的情况当时没有条理进行分析,导致代码相当臃肿,但最后把大量重复代码写成函数后,把几种捎带合为一体就简化了许多。
我的大体思想就是遇到主请求后进行请求队列扫描,把捎带请求放到捎带队列里,并删除相应的请求,遇到电梯类的超过目标楼层的请求,则进行重新扫描,得到请求队列后,调用第二次的方法进行输出即可。
但在这里我又很傻地犯了一个错误,有一个地方数组越界了,这是只有数组长度为1时才会crash,不幸的是公测的非法判断全是这种数据,所以自己一个也没对,究其根本,还是自己没有进行充分测试,一些极小数据因为简单而不测,这是很不好的思想。
由以上三次作业,我有以下几点心得体会,与其说是分享给大家,不如说是告诫自己。
1, 不要拖拉,提前写,因为真的事情越来越多
2, 认真读题,仔细阅读指导书,不要着急写
3, 构造数据前,一定要看看bug树,这会给我方向
4, 进行覆盖测试,无论大小
5, 虚心学习别人的长处,体会Java面向对象编程的魅力