在上了OO第一次课之后,很神奇的听说了原来这门课是默认我们已经掌握Java这门语言的基本语法和知识等,于是就在周五火急火燎地开始了Java的速成,此时离周三已经不到五天了,留给中国队的时间不多了,不过没办法,还是要硬着头皮写,凭借着扎实的C语言的基本功,成功的写完了这篇面向对象过程的工程,为了使整个工程浑然一体,所以从头到尾只有一个类。为了勉强符合面向对象的思想,所以只是建立了一个poly类,现在想想,还不如用一个数组来得实在,大概的思想就是用正则表达式把有用的数据信息抠出来,加上几个if语句来判断信息的有效性,然后存到一个巨大的数组之中,数组的下标为指数,元素为值,最后在循环1000000次来将数组对应位置的值加起来,最后又是循环1000000次来把运算出来的结果输出。现在想想都觉得这个方法太暴力了。
公测只错了一个点,是错在了压力测试上面,估计是数组开的不够大吧,还以为自己速成的听成功呢,风雨总在阳光后,互测被查出来的bug很多,很心痛,一个是crash记得很清晰,很不应该,就是在存入数组的过程中忘记判断指数的合法性,所以导致数组访问越界,还有一个就是在判断输入的合法性上处理的不是很得当,处理的方法很生硬,繁杂,正则表达式用的不是很溜。我拿到的那位同学,估计也是一天速成的,公测也错了很多,我大概就给他找了输出格式上面的错误,具体也不太记得了。
第二次作业和第三次作业都是单部电梯的模拟,一个是傻瓜调度策略,一个是a little smart策略,由于要考虑的点真的很多,而且据老师们的说法,为了锻炼我们理解能力,指导书留下了许多需要我们自己揣摩的地方,所以就有了答疑区几十条issue,要注意的点太多了,还要时刻关注群里面是否有新的说法。我的做法就是先将指导书里面的推荐的类来构建出来,然后思考这个类有什么样的属性和方法,这样的思考很有效,这样我就能先暂时放下那些复杂的部分,将工程的零件准备好,然后在慢慢构建他们之间的关系,这个方法很奏效,在构建好每个类的属性和方法之后,在将他们联系起来就不是很难的事情,请求队列用来储存构建的请求,command类来处理请求,一次处理一条请求,大体的架构已经建立起来了,最复杂的部分来了,那就是根据指导书上提出的一条条的条件和助教所说的注意点,和oj上面一条条的issue来慢慢修改自己的程序。最后就在我以为大功告成的时候,准备push的时候,我不小心将整个工程文件一个不剩的删除了,就连里面的Readme也被我删了,原因就不说了,很傻,主要是当时离ddl就剩下一个半小时,当时自己真的懵掉了,心是真的很累,什么都不想做了,心中无数*飞驰而过。不过想感谢我的胖友们,他们鼓励我,给我信心,叫我马上写是可以写完的,过一个点也不至于无效,于是谢天谢地我还是在一个半小时之内将其复现了一遍。
公测当然错了很多,一些条件判断上都没很考虑清楚,楼层请求也不递增,同质请求上面也没有能够很好地考虑清楚,不过还是赚了,不然可能就在第二次作业献出自己的第一次,而这次不知为何拿到了一个大神的代码,不仅公测全部正确,而且每个类都写得很好,可读性很强,硬是没有找到一个bug,不过看了他的代码,也让我对面向对象这种思想的理解更近了一步,我之前所构造的类感觉有一点不均衡,有些类没有什么属性和方法,甚至楼层类还被我构造成了一个空类,什么都没有。
第三次作业相较于第二次作业加入了捎带功能,虽说只是加入了一个功能,但是实现起来可真是要命,因为要考虑的东西就更加多了,同质的判断也因为加入了捎带而变得更加复杂,什么时候捎带,什么时候不捎带,开门之前怎么办,开门之后怎么办,相同楼层怎么办,同一时间怎么办,而且为了进一步考验我们的理解能力,这次指导书似乎比上次更加复杂了,一些具体的问题,还是要去issue里面一条一条的来比对,我主要判断捎带的思想就是,每一次助理一条主请求的时候,都会遍历主请求之后队列中的请求,在加上一些非常复杂的判断条件,来判断是否可以捎带,总之由于要考虑的因素实在是太多了,所以还是遗漏了许多条件。公测也错了许多,不过最不能让人接受的一点就是格式错误,invalid忘记之后的中括号了,所以很不幸,导致非法输入的测试点全错,当时自己很丧,虽然指导书里面没有奖的很清楚,不过助教在通知班里面说的很清楚,看也看到了,只是当时没有马上改,想等到手头的事忙完了之后再去改,拖着拖着就忘记了。很不幸这次又抽到了一个大佬的代码,公测又是全对,找bug也只是找到了一个同质请求输出incomplete。
心得:时间非常紧张,经常是周五互测结束后又要马上开始准备下一次作业,几乎是没有什么时间休息的。
开始之前的大体的构建很重要,这样有利于在开始建立工程的时候避免遗忘什么重要的东西,而且还有可以少走弯路,
构建的时候应该一步一步的构建,步步为营,环环相扣,特别是面向对象的编程方法,首先要将每个类都构架出来,包括个各类的属性和方法,之后再构思他们之间的联系,最后在慢慢完善其中的逻辑。
充分了解用户需求非常重要,而且要在上面花时间,把每个细节都了解到位,有时候一些要求是非常刁钻的,这样才不至于南辕北辙。
最后就是不要放弃,即使时间还剩下一个多小时。