第一次作业
第一次作业是计算多项式,看起来很简单,但在码代码过程中就发现这些那些的细节就很烦。因为之前的编程都会将输入标准化,不需要如同此次作业一样考虑一些刁钻的输入,不需要判断输入的内容。但事实的情况肯定是会和后者一样,所以这些细节的处理对我们来说也是一种锻炼。
因为头回使用Java语言,助教让我们用c语言也写一个相同功能程序,并且说明这次最主要的目的是让我们理解面对对象编程和面对过程编程的区别,但是很显然我没有完成主要目的。
在Java代码中我创建了一个unit类来表示每个多项式,unit的属性包括多项式的位置,前置符号,字符串形式和合法标识,方法包括合法判断与计算。Main中将输入的式子分割,创建不同的unit的对象,分别完成计算,然后再进行相加,这样,代码就写完了。
公测的时候,最后一个测试点测压力数据,我的代码扛不住就挂了,我很难受。因为讲道理我的代码设计是能够过这个点的,但是因为我懒得去写一个那么长的数据去测试所以就没有测一下,然后没想到bug就在这里。这件事情告诉我一定要有完备的测试,实践是检验真理的唯一标准。
第二次作业
第二次作业是傻瓜式电梯,可能是平时电梯接触的多,然后这次还是傻瓜式的,所以写起来不太费力,但还是一些细节很烦人,感觉十分的作业中有八分是细节。
Java代码中,主函数读取控制台输入的指令并将其传递给楼层类和电梯类,楼层类和电梯类将其处理,并以一定格式传递给请求类,请求类只有判断的方法,用来判断传递过来的请求是否合法,若合法则会将合法的请求数组化并传递给队列类,队列类会将所有请求生成一个动态数组,并逐个交给中心类处理,中心类会按照电梯规则来处理当前的第一条请求,处理完将动态数组返回给队列类,然后循环直至所有请求都处理完成。
由于考虑的不够周全,我公测时挂在了时间的临界点上。跟上次一样我也很难受,因为我在考虑了时间临界点的问题的基础上还是出了bug,考虑的不够周全。
第三次作业
第三次作业是有捎带功能的电梯,要求与第二次作业差不多,所以只需要以第二次的代码为基础修改就可以了。
类图与第二次作业一样,但是Center类的key()方法做了很大修改以满足新的需求。虽然只是添加了捎带功能,但是还是感觉复杂了很多。由于在开始写之前没有考虑全面,理清思路,这让我在后期debug的过程中很难处理一些问题,最后不得不重写key()方法,所以时间不够,导致了公测时依然存在bug。并且没有细读指导书,没有使用继承和接口的设计,让我在互测时又被扣分。
这次作业让我长了教训:在写代码之前一定要先理清思路,明确方向,这样可以事半功倍;并且一定要细读指导书,按照需求来写代码。
总结:
刚刚接触Java,因为与c语言的类似性所以写起来并不是特别困难。但是它的核心——面向对象的编程思维还是没有掌握,需要在后期的学习中有意识的去关注这个问题,去真正的理解这个道理。
这三次作业让我明白了细节在程序中的重要性,一个好的程序首先应该能够考虑到各个方面的问题。这些问题也不是一次就能明白的,指导书也会不断的补充,说明要求是在编程的过程中更改的,所以程序同时应该有很好的可塑性,这样在新的要求下发时可以很方便,很明确的进行处理,否则乱七八糟的改动会让代码显得臃肿并且陌生。
最重要的是,不要着急开始写作业,在码代码之前一定要细读指导书,有清晰的思路,知道该怎么去写,否则就容易遇到像我第三次作业那样遇到毫无办法只能从头再来的尴尬境地。