oo第二单元总结

第二单元的oo作业主要是多线程电梯问题,相对于第一单元来说,对我友好很多,第一单元主要倒在正则表达式和输入输出的问题导致自己的程序漏洞百出,甚至无处下手。

第一次作业:

  第一次电梯作业完全是傻瓜电梯,完全不需要考虑捎带的问题,完全是傻瓜调度问题。主要的模型还是生产者和消费者这一经典模型,把输入当作生产者,把输出当作消费者,开一个电梯线程,用于模拟电梯运动,从输入获得一条指令,存入队列,然后执行,执行完之后,移除这条指令后再运行下一条。但是如何停下来是一个问题,其实一开始我犯了一个很傻的错误,在将指令存入队列之前,我已经使用了if(request!=null),但是在之后的判断停止的过程当中,我的终止条件是队列最后一项是null,所以导致无法停下,这一个错误导致我debug了很久,最后在大佬的帮助下找到了这个愚蠢的错误,总算是完成了第一次作业。(其实差点没交上0.0)

类图:

度量分析:

      

第二次作业:

  第二次作业在第一次作业的基础上增加了捎带策略,而不是简单的傻瓜调度了,其实大体结构与第一次作业没有说明大的差别,主要是将哪些指令存入队列一块执行,也就是捎带,但是我在第二次作业的设计当中遇到了很多问题,首先就是写完程序之后执行发现电梯会在两个层之间反复运动,后来debug发现是有一处循环出现了问题,更改了花括号的位置问题就解决了,还有就是捎带的问题,起初我的捎带策略是下一条指令的起始楼层大于等于当前指令的起始楼层就可以捎带,但是这样出现了一个问题,我判断电梯停下的条件是电梯内已经没有人了,但是我在自己测的时候发现了如果指令是1-2,3-4(数字指楼层)这样的那我的电梯就只会执行第一条指令,而将后面那条指令扔掉了,这样就会出现Bug(因为我已经判断了可以捎带,但是电梯在执行完第一条指令之后电梯里已经没有人 了,导致电梯停了下来),之后我修改捎带策略为电梯当前正在执行一条指令,如果下一条指令的的运动方向与当前指令的运动方向相同,并且下一条指令的起始楼层和终止楼层位于当前指令之间(其实就是一个包含关系)就可以捎带,然后电梯运行到每一层都进行依次判断,判断有没有可以捎带,如果有就加入队列,同时判断有无人员进出,但是这样设计的问题就是有些可以捎带的情况却没有捎带,在中测的有一个点是1-9,1-10,1-11,这种情况就会导致我的电梯执行的是傻瓜调度,发现错误后我更改了捎带策略,只判断起始楼层是否位于区间之内,这样捎带就解决了(虽然这也并不是什么很好的捎带策略0.0),虽然最后强测点全部通过但是却没有什么性能分。

类图:

度量分析:

第三次作业:

第三次作业相对与前两次,难度有提高,增加了电梯数量和电梯载客数,以及电梯换乘,但非常遗憾,我最后并没有能够de完bug,最后没有能够通过中测进入互测,自己对多线程的理解还不够,以及自己对如何将指令分派给各个电梯,如何让让散步电梯协调运作还不是很清楚(暴风哭泣,最后没有de完bug)

BUG修复:

前两次作业我都通过了强测并且没有出现错误,第三次作业没有交上,所以这一部分我没有什么东西叙述的。

体会与感想:

第二单元总的来说我是有进步的(相对于第一单元做成的那个样子),但很遗憾的就是没有交上第三次作业,多线程的相关内容我还不是很清楚,但是经过了这一单元的学习,我还是有不少的收获,至少我已经能够完成一些简单的多线程问题了,希望在下一个单元我可以做的更好。

 

posted @ 2019-04-24 11:21  hurryup  阅读(105)  评论(0)    收藏  举报