首页 > 其他 > 详细

blog3

时间:2021-06-10 23:44:45      阅读:32      评论:0      收藏:0      [点我收藏+]

一、前言:这三次的题目主要针对类的继承,多态性的使用方法以及接口的应用,题目集7是卡片游戏,题目集8和题目集9都是ATM仿真系统,题目集7难度挺大,主要是要创建数组对象和输入输出以及类与类之间的关系,还有ArrayListCollections的使用,题目集的第2题的难度比第1题更难,它需要把分类输出,还要每个类的数据降序输出,难度偏大。

而题目集8ATM仿真系统,类与类之间的关系较复杂,主要模仿取款和存款以及查询,但好在不能跨银行操作,都是借记卡,这就让这题难度稍微缩小了一点,这里也大量的使用了ArrayList里的各种方法( 这是标准代码 ),而我用的是继承,给的标准答案是聚合。所以我的代码少了,但是没有一般性。题目集9我用的是聚合,相比与题目集8增加了贷记卡还可以跨银行操作,使得难度变大了。

二、设计与分析

题目集77-1:

类图:

 

技术分享图片

从这个类图,可以看出类与类之间的关系,首先Comparable是一个接口,Card继承了该接口。Circle,Rectangle,Triangle,Trapezoid都继承了Shape类,而Shape,Card与DealCardList之间是聚合关系。

所以从这里看,代码最后不会太长,因为所涉及的类不多,聚合关系的类也不多,不难看出这道题目难度不会很大,复杂度也不会很大。

复杂度:

技术分享图片

 

由这个复杂度可以看出,代码有点复杂化了,应该通过优化来尽量减少复杂度。

运行结果:

技术分享图片

 

存在的问题及解决办法:当时在Main方法里输入,发现无法进行下面的操作,然后我就更换了方法,创建对象数组,在创建每个对象时输入,这样就可以进行接下来的操作。还有在排序的时候,输出时发现名称和计算结果不匹配,然后我通过将这两个数据同时存入一个数组的同一个位置(即这两个数据的读取对象),然后可以同时输出。还有一个更大的问题,就是数字与其对应图形的数据对不上,这时就需要使用List里的get方法来进行匹配和输入相应的数据。还有就是只输入0的这种情况,题目中没有给应该输出什么,后面通过一个一个试才试出来。还有在求三角形面积时,我进行了分类,然后出现了错误,后面去网上查,发现可以使用海伦公式。这样所有的问题就都解决了,代码也基本可以完成题目要求。

改进建议:在完成题目的时候要尽量注意代码的复杂度(此题代码有点复杂),不能将代码弄得太复杂,导致看不懂,而且需要有相应的注释。

题目集77-2

类图:

技术分享图片

 从这个类图,可以看出类与类之间的关系,首先Comparable是一个接口,Card继承了该接口。Circle,Rectangle,Triangle,Trapezoid都继承了Shape类,而Shape,Card与DealCardList之间是聚合关系。

所以从这里看,代码最后不会太长,因为所涉及的类不多,聚合关系的类也不多,不难看出这道题目难度不会很大,复杂度也不会很大。

复杂度:

技术分享图片

 由这个复杂度可以看出,代码有点复杂化了,应该通过优化来尽量减少复杂度。

运行结果:

 技术分享图片

存在的问题及解决办法:相较与上一题代码,这题只需要在上一题稍作修改,输出要修改,排序要修改。我第一次运行的时候发现不能只用一个数组来输出,会出错。因为有四个不同的图形,所以要创建四个数组,按要求依次输出。但是我这样做了之后发现了另一个问题,在没有这个图形代表的数字时则不需要输出这个图形,所以这个题目还需要一个数组来存所有的数据,通过匹配来将这些数据依次存入不同的图形数组里。还有就是在理解这个最大值时,理解错了,不是所有的里面值最大的,而是每个图形数组里的值的总和最大的,并输出这个值。还有一个重要的问题就是没有给只输入0时应该输出什么,这导致我在这里浪费了很多时间。还有在求三角形面积时,我进行了分类,然后出现了错误,后面去网上查,发现可以使用海伦公式。

改进建议:在写代码时尽量避免使用多个for循环,这样可以减少时间复杂度。

题目集8ATM(1)

类图:

技术分享图片

 从类图可以看出,这个代码基本使用继承完成的,继承是可以使代码更加简化,可以节省很多的时间,但是基本不具备一般性,而且复杂度不大。

复杂度:

技术分享图片

 

 

运行结果:

技术分享图片

 

存在的问题及解决办法:开始的时候只过了六个测试点,到后面过了九个。这中间出现了挺多问题,只能单行输入,无法对多行进行操作,后面用对其创建了一个字符串,对其进行分割,然后存入新的数组,最后可以实现多行操作,但是后来提交的时候发现还是过不去这个点,后面就放弃了。对于其他两个点,倒是小错误,就是取款金额超出,还有跨行。对于取款金额超出,当时忘了加的输出,而跨行则是银行卡和ATM机匹配的时候出现了一些错误,后面通过改正就通过了。总的来说,就是没有太大的问题,就是最后一个点没有过,让室友帮忙看也没有发现问题,给的已知的测试点过了,但是提交过不去。

改进建议:我个人认为这道题目用聚合加继承可能会更有一般性,单纯的使用继承会使代码更简单,没有那么复杂的关系,但是不具备一般性,不方便以后的添加以及修改。而加一个聚合的话可以更好的解决这个问题,因为在用聚合的时候增加了多态性,多态性可以提高代码的复用性,还可以对代码进行维护。

题目集9ATM(2)

类图:

技术分享图片

 从类图可以看出,这个代码肯定比较长,因为太多类之间有聚合关系,其中还夹杂这继承关系,这样的代码一般具备一般性,但是较为复杂,可能会在写的时候把自己也绕进去了,到最后出现了太多的错误,这是正常的。

复杂度:

技术分享图片

 

运行结果:

技术分享图片

 

存在的问题及解决办法:当时对于透支的利息的计算出现问题,要求给的是取款金额乘个百分比,到后面发现错了,是透支的部分乘个百分比,这个时候也分了两种情况,当这张卡是第一次透支时透支的利息是透支的部分乘个百分比,超过一次就是取款金额乘个百分比,这个问题也导致了我好多点过不去,后面还好发现了。还有就是透支有限度,当时我没有发现,后面发现了才知道它要输出余额不足。还有应该问题要区分借记卡和贷记卡,当时我未区分,导致出现了好多错误,后面及时更正。最重要的是当时我有一个点一直过不去,就是多次透支最后超限,因为我当时未在计算是减去跨行的手续费。

改正建议:代码倒是没有什么需要改正的吧,就是我觉得需要改正我自己的心态,当时做不出来的时候心里很浮躁,我觉得我应该学会平静下来。

三、总结

学习总结:

对于这几次的题目集我学会了继承与聚合的区别,以及各自的优势,还学会了ArrayList,List,Map,Collections这些类的使用,以及List里的get方法,add方法,remove方法,Map里的get方法,add方法,最后我认为我真的新学会的Collections的swap方法,sort方法。还学会了通过a.getShape().getArea()这样的方式来获取数据。

通过这几次的题目集我感觉对于聚合应用的不熟练,对于类少一点的我可以理解,但是一旦类太多了,我就会非常的蒙,到后面都不知道怎么写了,所以我需要进一步的了解。还有就是Map的使用也要多加练习,还有对与排序的各种方法,除了常见的三种,当需要全部输出的时候可以使用Collections的sort方法或者使用Arrays的sort方法来进行排序更简便,这样避免了for循环,也减少了时间复杂度,更重要的是还要努力将这几次学到的东西融汇贯通,不能将问题越积越多,要尽早解决自身存在的问题。还有对于多态性不太理解,应用熟练。对于接口的话,单接口我基本可以使用,但是对于多接口就搞不懂了,这方面的学习还不够深入,所以我觉得我应该更加深入的学习一下

课程建议:

对于老师的上课模式,我没有什么问题,以及这样的作业形式都可以接受,就是查重后的处罚我依旧觉得需要改进。课下模式我还能接受这样的作业形式以及实验形式,但是我就是觉得向老师问作业的提交以及一些操作问题时,老师的回答都感觉有点模糊的感觉,就是不理解什么意思,对于操作问题,老师就基本回答不完整,可能是认为我们后面都会,其实我们不一定会的,希望老师以后可以完整的讲完,不管我们会不会。还有就是出题目的时候希望能完整一点,有些测试点都不知道要输出什么,甚至有时给出的算法都有点问题,其他的就没有什么建议了。

blog3

原文:https://www.cnblogs.com/lhq-and-cjx-3327940673/p/14862171.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!