关于学期最后一个月Java的学习与反思

一、前言

习题集七:

知识点:主要有对继承和多态的运用,ArrayList泛型的应用方法,Comparable接口及泛型的应用。同时在编写代码的时候要记得遵循单一职责和开闭原则。

题量:本次作业只有两道题,题量总的来说是较少的。

难度:因为这两道题目还是在考察我们对继承和多态的运用然后就只是新加了一个利用ArrayList存储对象进行排序的应用,同时两道题目是有不少相似的地方,所以这样看来本次题目集的难度还是较为简单的。

习题集八:

知识点:除了基本的继承和多态的运用,本次作业还用到了双向链表用以存储对象,方便从依次查找。

题量:虽然本次题目集就只有一道题,但是很考验同学对代码的设计,和对各种技术的选择。同时,所以我认为本次作业的题量还是较多的。

难度:本次作业基本上是涵盖了本学期所学的大部分基础知识点,并且本次作业不管是从代码的量和对各个实体类的设计都是一个不小的考验。这里面包括了要将很多数据去进行一个初始化和你该如何去将各个实体类之间的关系处理好等。所以综合这些考虑我认为本次题目集的难度是较大的。

习题集九:

知识点:题目集九是基于题目集八的基础上进行一个功能上的加强,所以知识点的话也没有太大的变化,就是在对代码的设计上进行了一些改动。

题量:因为本次作业是在老师给的源码上的基础去进行一个功能上的增加,所写的代码量大大的减少,所以题量方面我认为还是适中的。

难度:本次作业是在原有的功能基础上增加了一个信用卡取款的功能并且从原来不能透支的规则变为信用卡能够透支五万元,在原来不能跨行取款的规则改为当跨行取款时将会扣除手续费,并且跨每个银行的手续费不同。所以虽然说本次题目集是已经有了部分源码,但是仍然很考验同学们去设计这个代码,如何将这些改动的功能很好的加上去。本次作业难度给一个中上难度的评价还是很合理的。

 

二、设计与分析

题目集(7-1)、题目集(7-2)递进式设计分析总结:

(7-1)这道题根据题目所给的类图,很容易就分析出各个类之间的关系,例如四个图形类继承于抽象类Shape类,Card类继承了Comparable接口,DealCardList是单独的一个功能类。在分析出代码的大致结构后,便是对各个类中的内容进行填写。

 

 

 

 

先是去完善Shape类,在这个类中添加了一个图形名称的私有属性后,在添加了求面积和体积的两个抽象方法,便于后面的图形类根据自己不同的求体积和面积的规则进行一个重写,最后重写一个输出的方法。如图所示:

 

之后便是把四个图形类进行根据自身的属性和特性去将继承而来的求体积和面积的方法重写。下面给出一个圆的例子:

 

其他三个图形类也大体像这一样。

做完这些之后就是对Card类进行完善,在这个类里面主要是利用Comparable<Card>这个接口重写一个面积大小进行排序的方法。

 

做完这些之后,最后就是将DealCardList类完善,这个类是主要的功能类,里面有对每个对象里面数据的判断和对链表里面每个对象的进行相应的图形所规定的计算和名称的存储。这里面主要的操作就是运用加强for对存了对象的链表进行一次次遍历,然后进行相应的换算和变化等。

关于(7-2)这道题,其实大体上和(7-1)是相似的,只是增加了部分功能,主要是修改代码,实现将相同类型的图形排序放在一起。通过观察两次作业的类图和复杂度可以更好的看出这题作业的具体差别。要说怎么实现这一功能,就还是通过遍历链表里面的每一个对象,如何通过对比图形的名称来判断是归到哪一个图形的类别里面。

 

 

 

 

 

 

 

题目集(8-1):就像我前面说的,对于这次作业难度是中上的但是却是很复杂的。所以先来说说我自己的设计,一开始我是想着通过HashMap来存储对应每个人的个人账户和卡,但是后来发现太复杂并且实现起来更为困难,所以就放弃了。又因为当时没想到运用双向链表,所以就采用了不太合理的的办法,用数组存储每个用户的账户,卡号和密码等。

 

 

 

然后对于银行中存在编号多少的ATM机我也是用数组来存储的

 

这样做的话到后面当你需要判断你输入的ATM机的编号是否存在跨行现象只需要遍历一下这个银行数组。

还有将所有ATM机的编号存入一个数组中,这样当判断输入的ATM机的编号是否存在时,也就可以通过遍历数组来判断。

 

然后关于判断卡号是否存在时也是相同的道理。

 

对于其它的一些输入错误就是在对应的各个类里面添加判断方法,添加完之后,放在了主方法里面去进行运用。

 

 

 

对于输入的字符串我则是用正则表达式将它们切割后一段一段的去处理。之后就是对于功能类的编写,前面一部分主要还是做一些初始化和输入判断的工作,功能类里面实现了存取款的操作,因为我输入的数字都是字符串,所以对于金额这个段字符串需要转换成数字来计算。下面给一个例子如下:

 

 

 

实现这一部分后基本上大体的内容就完成了,剩下一些细节就慢慢去解决,完成之后这次作业也就所要求的功能也都实现了。但是当我看到我这道题目的复杂度和类图时,我觉得我这次代码的设计是不太好的。

题目集(9-1):这道题关于设计方面的分析其实是比较少的,因为老师给了源码的基础让我们直接在这上面修改。我对这道题的设计就是直接将新的用户的信息存入,然后再添加一个贷记卡类和贷记账户类。最后就是写改一下功能类里面的方法,做完这些就基本上结束了。

三、踩坑心得:让我印象最为深刻的应该就是(8-1)了,在这次题目集中我有很多小错误,导致在最后代码写完后成功运行后,提交上去却一直答案错误。然后自己把代码从头到尾去看一遍一遍的看,代入数据去一遍一遍的测试,最终才把所有的错误给修改过来。其中有一个错误就是出现在这里,填写信息的时候给写错了。所有最后再说一句就是一定要细心些。

 

 

 

四、改进建议:

关于这块我主要就写一下关于题目集八(8-1)的改进:

说实话当我拿到老师给的源码后,我才发现自己原来写的代码在设计上的有很多糟糕的地方,例如我本应该用双向链表去将用户的各个信息存储,就像下面这个示例一样

 

 

 

这样将数据初始化可以更方便更简单的去访问每一个用户的账户信息。并且不管是在查找还是进行存取款操作时也能够非常的便捷和快速。

五、总结:

经过这个月习题集的练习后,提升了一些在对代码设计方面的能力,并且在对于基本的继承和多态的运用也更为熟练了一些。同时也是了解到了自己的一些不足之处。发现自己在思考问题的过程中应该更全面一些,对于一些新的技术和知识应该多去用,这样才能提高的更快。最后还有一点就是在写代码的过程中,要多注意细节,例如对于一些数据的存储时就一定要仔细,不然很多时候bug会在你意想不到的地方出现,导致浪费很多时间去找错误。

posted @ 2021-06-20 19:04  不自知  阅读(91)  评论(0)    收藏  举报