经历过上学期计组的风浪,我天真的以为oo不会很难熬,直到第一次作业的来临。说是一天速成java都是不夸张的了,对于我这种之前从未接触过面向对象思想的人来说,第一个java程序就是包装精致,套了一层外壳的c。

    从周日开始学java,到周一开始看指导书,周二开始强行写代码,整个过程都有很大压力,除却学习基本语法外,正则表达式的理解与使用花费了我大量的时间(因为不知道它是怎样一个概念以及如何使用)。

一、第一次作业(多项式加减法)

   第一次作业算法上比较简易,大家方法应该大同小异,这里就不具体介绍了,主要说说踩到的坑吧。公测我错了个意料之中的点——爆栈,因为写的仓促,程序的鲁棒性遭到忽略,try catch的用法我还是在公测结束之后才有耳闻。鉴于小编的智障,在互测上也被人发现了个bug,规定是数字长度不能超过6,我确判断了数字字符串长度不能超过6,忽略了数字前可能会有前导+的情况。

   我拿到的人代码简洁而又美观,但他还是爆栈了...这也是我至今三次互测中唯一找到的别人的错误...所以说,找错这方面的经历还是严重缺乏的,就不和大家分享了...

度量图:

类图:

二、第二次作业(傻瓜电梯)

    第二次作业对比第一次也有难度上的飞跃,读完指导书和要求后,面对一个个对象,无从下手。第一遍写的时候,把所有的电梯运动都写到调度器里去了,导致其他类里没有什么方法。然后因为debug模式下和java模式下运行结果不一样,不知道如何解决,于是又整理思路写了一遍,最后才知道原来是被输入坑了,当然这也是后话了。

    真心不想提输入的这个坑,仿佛再一次提醒自己很蠢。写完程序开始debug的时候,发现输入多行样例只出第一行的结果,debug时却能一行一行正确输出,以为是自己程序出了什么致命错误,周一晚上找了一晚上未果后,第二天决定放弃这个千疮百孔的程序,于是周二下午开始重写这个程序,有第一遍的经历之后,再加上询问了其他人的思路,理清之后第二遍写得还算顺利,到晚上就写齐了。但是和之前有相同的问题,这时候,我没有像之前那么蠢,而是耐下心来找bug的源头,不能浮于表面。最终我发现,这个bug原来隐藏在输入上,我的输入并没有识别一整段输入,从而导致只报出第一行输入的结果。在善良美丽可爱大方的室友的帮助下,我引入hasNextLine方法,至此,我的程序终于能成功运行了。

    其他的都是一些边边角角的小bug,修补的还算顺利,但是我忽略了时间的边界问题,导致公测错了两个点,互测错了两个点。

度量图:

类图:

三、第三次作业(ALS电梯)

   第三次作业是在第二次作业的基础上增加了捎带功能,可能是想的时间比较久,采用的方法也还算巧妙,整个程序就在第二次作业的基础上增加了100多行代码,总共300多行代码。并且公测互测并没有被找出bug

   我一开始的想法是将当前楼层与目标楼层之间的可能可以捎带的楼层按照楼层数重新排列,这个方法应该算是比较普遍??至少我身边很多人都是这么写的。但是细想总觉得整个方法太过复杂,一定会有更好的解决办法,于是最后的想法是在电梯从当前楼层到目标楼层的过程中,每到一个楼层,就判断并执行可捎带的请求,然后删除被执行请求的同质请求,这样就不需要对队列里的请求按照楼层数重新排列了,且代码简洁易懂。

度量图:

类图:

四、总结

1.不要急于写代码,要仔细阅读指导书,不要一有思路就开始写,要从头到尾洞悉整个过程,先写算法,再开始编码。

2.debug时一定要找到bug的根源,不要一出问题就认为是eclipse的问题,或者是认为自己的程序有fatal error,有时候可能只是一个难以发现的小bug。

3.不要着急,一切困难都是可以解决的,只要用心,一定会成功。

4.写完程序,de完bug(自己认为de完bug)之后再看一遍指导书,一个个对照它的要求,看看是不是符合。

 

posted on 2018-04-03 23:26  LuZZhang  阅读(132)  评论(0编辑  收藏  举报