题目集7-9总结
一.前言
经过了题目集7-9的训练,我感觉收获颇多,让我的编码能力有了很大的提升。题目集7-9的题量并不是很多,但是题目精而且对我来说练习的效果很好,每个题目的解决都是需要花费一些时间,需要我认真的思考,在实现题目要求的过程中和在遇到困难问题去努力解决的过程我锻炼了好多,每次看到通过测试点的时候就会特别开心,特别有成就感,想要一下把要求全部实现。
题目集7-9包含了很多知识点,在完成这些题目的时候我也学习到了或者巩固了相关知识。题目7加强了我对继承和多态的理解,各种图形具有一些相同的属性和方法,可以写一个Shape类来让各个图形类继承,这样就实现了代码的复用性,减小代码和数据的冗余度,大大增加程序的重用性,继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。同时题目7让我学会了ArrayList泛型的应用方法,Comparable接口及泛型的应用方法,这样就可以把一个对象存进列表里,然后按照对象中某个属性使用sort()方法排序。题目集8是一个生活中的实例,包含了对ArrayList的使用,包含了继承和多态,同时需要仔细思考实体类之间的关系,还有类和属性之间的关系,比如刚开始解题时,我没有思考清楚,搞错了余额属性和类的关系,把余额属性放在了银行卡实体类中,这导致后面解题错误,其实余额是和银行账号绑定在一起的,一个银行账号可以对应多个银行卡,不同的银行卡只能对应一个银行账号,当对银行卡进行操作的时候是对应银行账号的余额信息变化。
二.设计与分析
(一)题目集7
(1)类图
题目7-1和题目7-2的类图是一样的

(2)分析总结
在题目集7中,代码共有四个实体类,分别为Circle类,Rectangle类,Trapezoid类,Triangle类,它们都继承了Shape类,拥有了Shape中的getArea()方法来求图形的面积,拥有validate()方法来判断输入的图形属性是否合法,拥有toString()方法。通过使用继承实现了代码的复用性,减小代码和数据的冗余度,大大增加程序的重用性。然后main方法通过创建Card对象,把所有每个Card对象存储在ArrayList中,然后通过sort()方法对Card对象排序即可以得到排序后的卡片,题目7-2和题目7-1不同的地方在于可以按照卡片类型分组输出卡片,而实现该要求的方法就是把不同类型的Card对象储存在不同的ArrayList中,然后再对不同的List进行Sort()排序即可实现该进阶要求。这次题目集主要是让我学会了ArrayList泛型的应用方法,Comparable接口及泛型的应用方法。

Card类实现Comparable接口,然后重写CompareTo()方法

(二)题目集8,9
(1)类图
题目集8和题目集9的类图是差不多一样的,题目集9的类图BankAccount中增加了一个账户类型属性,分为贷记账户和借记账户,main方法里的逻辑不一样

(2)题目集8和9分析和总结
(1)题目集8
一共有三个实体类,分别是ATM类,银行账户类,银行卡类,在mian方法中创建各个对象,然后把对象信息存储在ArrayList中,最后就能在main方法中编写相关逻辑代码实现银行的存款,取款,查询余额等操作。

图.存储对象信息代码
该题目的难点是理清实体类之间的关系,一个银行账户可以对应多张银行卡,所以不同的银行卡进行存取款操作时其实是对银行账户的余额信息进行操作。银行账户信息列表中应该存储银行卡号信息的数组,这样就能实现一个银行账户可以对应多张银行卡了。


通过输入数据的长度判断执行的操作,长度为1是进行查询余额操作,长度为4时则进行存取款操作


当输入长度不符合格式时报错

存取款操作后设置新的余额信息,这样就实现了题目要求

出错提示

(2)题目集9
题目集9时8的进一步迭代要求可以实现跨行取款和透支取款,贷记账号可以透支,借记账户不能透支,跨行取款和透支取款都需要手续费。要实现透支取款则需要在银行账户的属性中增加账户类型,判断该账号能否透支。
当借记账户取款超出余额时,提示余额不足


需要注意的是当为贷记账户但透支取款金额大于透支限额时也会提示余额不足

然后则按题目要求进行操作,如果是透支取款收取手续费,跨行取款也要收取手续费
特别要注意的是如果是借记账户但是跨行取款且余额减去手续费为负数的话则取款失败



三.采坑心得
(一)题目集7
题目集七中主要收获是学会了如何实现ArrayList通过某个属性进行排序,大部分时候ArrayList中存储的不止一个属性,这时候排序就需要通过ArrayList中某个属性进行排序。通过重写Compare中的CompareTo()方法可以实现升序或降序排序

(二)题目集8,9
题目集8中的采坑主要是没有理清楚实体类之间的关系,一个银行账户应该要对应多张银行卡,还有刚开始解题时,我没有思考清楚,搞错了余额属性和类的关系,把余额属性放在了银行卡实体类中,这导致后面解题错误,其实余额是和银行账号绑定在一起的,一个银行账号可以对应多个银行卡,不同的银行卡只能对应一个银行账号,当对银行卡进行操作的时候是对应银行账号的余额信息变化


题目集9中的采坑主要是没有思考清楚逻辑关系,如果是借记账户但是跨行取款且余额减去手续费为负数的话则取款失败,解题的时候没有考虑到该情况,导致有一个测试点一直过不了,经过仔细思考后发现了该问题。
四.改进建议
主方法中逻辑语句太多,太过于复杂,不利于代码的阅读和改进,可以新建一个类,把主方法中的一些逻辑语句放到该类当中,让代码看起来更为简洁,清晰。
五.总结
通过这几次题目集的训练,加强了我对继承和多态的理解,各种图形具有一些相同的属性和方法,可以写一个Shape类来让各个图形类继承,这样就实现了代码的复用性,减小代码和数据的冗余度,大大增加程序的重用性,继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。同时题目7让我学会了ArrayList泛型的应用方法,Comparable接口及泛型的应用方法,这样就可以把一个对象存进列表里,然后按照对象中某个属性使用sort()方法排序。题目集8,9加强了我的逻辑思维能力,让我能够更全面更仔细的去思考问题,考虑每一种可能发生的情况,并对其给出相应的操作。同时,我需要进一步学习ArrayList的使用,加深对继承和多态的理解,实现面对对象编程。我觉得这些题目集训练效果很好,之后希望可以继续按这样的题目类型出题,既不算太容易,也不会太难,经过自己的思考和努力就可以解决这些问题,在这个过程中可以锻炼很多。
浙公网安备 33010602011771号