20201710赖成慧的第三次blog总结

一,前言

  题目集7~9结束了,题目集7考察了继承、多态和接口,难度没有很高,题目集8和9是类似题目,做一个银联模拟程序,考察类的设计能力,题目下限很低,实现题目要求的输出很简单,但是题目上限却很高,从题目集8到题目集9能不能很快的实现取决于我们的设计。

二,设计与分析

 1.题目集7(7-1)、(7-2)

  7-1.图形卡片排序游戏

  题目:考虑一款适合于小学生的卡片(Card)排序游戏,其规则为随机发放一些卡片给学生,卡片分为四种形状:圆形(Circle)、矩形(Rectangle)、三角形(Triangle)及梯形(Trapezoid),并给出各种卡片的相应参数,要求学生能够迅速求出各卡片的面积大小然后将卡片按照其面积值从大到小进行排序,同时求出所有卡片的面积之和。

  思路:Main类,DealCardList类,Card类,Shape类,Shape类的子类:Circle类、Rectangle类、Triangle类、Trapezoid类。根据输入在DealCardList类里面创建相应对象,并且添加进Card的对象数组中。

  类图:

 

 

  遇到的困难:

    ①开始写的时候思路没有想清楚,因为测试样例比较大所以比较难以手动计算,验证错误比较困难,而且我担心几万次的循环会使得内存占用特别大,运行时间也可能会超时。

    ②第一次使用这么多的对象数组,在写代码的时候经常会认错,然后用错。

  解决的方式:

    ①在多次测试之后实际上并没有超时,所以依旧采用循环方法。

    ②在多次校对之后,把错误都排除掉了。

  心得体会:

  这次的卡片排序题目,有一次考验了我们的能力,属于上限很高下限很低的题目,但是这更能体会我们对于Java的掌握能力。在这次作业中,我知道了Scanner的对象可以创建在方法外面,调用的时候就可以直接Main.Scanner的对象来调用该对象。这次还使用了Comparable接口,我用该接口实现了排序功能,该方法是比较两个对象,返回-1、1和0。然后在使用的时候Collections.sort(目标对象数组)就可以实现排序功能了。

  7-2.图形卡片分组游戏

  题目:

  • 在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:1 3 4 2 1 3 4 2 1 3 0
  • 根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。

  思路:在7-1的基础上改进,增加分类排序的方法。在Main类里创建一个Integer类的对象数组,用一个while循环接收输入。

  类图:

 

 

   遇到的困难:

    ①不知道该如何分割对象数组,并且在操作中会对已经存在的数据进行更改,所以直接沿用7-1的设计已经是不行的了。

    ②做题目时还没学会super的用法,在调用父类参数时浪费了很多时间

  解决方法:

    ①将Circle类、Rectangle类、Triangle类、Trapezoid类每一个类都创建一个对象数组在DealCardList类的对象里,在创建对象时,每一个数据都创建两个对象,这样储存两次,就可以在操作的同时,不影响另一份的数据。

    ②看书和相关教程说,在努力之下学会了。

  心得体会:

  这次的卡片排序题目,有一次考验了我们的能力,属于上限很高下限很低的题目,但是这更能体会我们对于Java的掌握能力。在这次作业中,我知道了Scanner的对象可以创建在方法外面,调用的时候就可以直接Main.Scanner的对象来调用该对象。这次还使用了Comparable接口,我用该接口实现了排序功能,该方法是比较两个对象,返回-1、1和0。然后在使用的时候Collections.sort(目标对象数组)就可以实现排序功能了。

递进式分析总结:

  这两个题目为递进式设计分析题,所谓递进式,我认为是一步步实现功能,但是和C语言不同的是,这条路上会有很多实现功能分支。在这次作业中学会了很多,再次审视到了自己的不足。不得不承认,经过了前两个单元的洗礼,我的架构能力得到了极大的提升,每一次作业都可以在前一次作业的基础上进行新的修改,而不需要大费周折的重构,这就让我这一单元的体验好了许多。当然,JML带来的规范化也使我编码的目的更加明确,在写代码之前先明白自己想得到的输出,而不是直接在算法层面进行思考。

2.题目集8

  题目:

  编写一个银行ATM机的模拟程序,能够完成用户的存款、取款以及查询余额功能。

   (1)相关概念说明

  中国银联(China UnionPay):成立于2002年3月,是经国务院同意,中国人民银行批准设立的中国银行卡联合组织,总部设于上海。主要负责建设和运营全国统一的银行卡跨行信息交换网络、提供银行卡  跨行信息交换相关的专业化服务、管理和经营“银联”品牌、制定银行卡跨行交易业务规范和技术标准。其包含多家银行机构。
  银行(Bank):是依法成立的经营货币信贷业务的金融机构,是商品货币经济发展到一定阶段的产物。
  银行用户(User):能够在银行办理相应业务的用户。一个银行机构可以拥有多个银行用户及多个银行账户,一个用户也可以在多个银行机构开立账户。
  银行账户(Account):客户在银行开立的存款账户、贷款账户、往来账户的总称。一个银行用户可以拥有多个银行账户。
  银行卡(Card):经批准由商业银行(含邮政金融机构) 向社会发行的具有消费信用、转账结算、存取现金等全部或部分功能的信用支付工具。一个银行账户可以发行多张银行卡。                                              ATM(Automated Teller Machine),自动柜员机,因大部分用于取款,又称自动取款机。它是一种高度精密的机电一体化装置,利用磁性代码卡或智能卡实现金融交易的自助服务,代替银行柜面人员的工作。可提取现金、查询存款余额、进行账户之间资金划拨、余额查询等工作。一般ATM机隶属于某一银行机构。

  类图:

  

 

 

   遇到的困难:

    ①第一次做这种类设计的题目,有些慌了神,做的时候本着的原则是能少一个类就少一个类,然后被老师制止了,被告知,有多少个对象就应该设计多少个类,这样在后来更新程序的时候才能添加或者更该功能。

    ②由于设计的类太少了,在Main类中要找到某个特定对象的时候,难以返回该对象,出现了很大的问题。

  解决方法:

    ①这次题目强行做下去了,在后续的题目中参考了老师的类设计,实现了功能。

3.题目集9

  题目:

    与题目集8一样,本次作业中银行卡包含借记卡和信用卡两类,且允许跨行办理相关业务(例如在中国建设银行的ATM机上使用中国工商银行的银行卡进行业务操作。)

  思路:老师发了上次代码的参考答案,把其中的几个方法改写了一下。尤其是判断方法,让跨行取钱变得可能,同时判断是否跨行,并且计算手续费,

  类图:

 

 遇到的困难:

  ①在改写withdraw方法时,有一步判断为取款金额是否大于余额,这里的判断我写了较长时间,主要原因有以下几点:1.要判断卡是什么类型,借记卡或者是信用卡;2.信用卡的场合下,要判断手续费和余额和取款金额是否在50000的借款额度内;3.借记卡的场合,要报错“Sorry,your account balance is insufficient.”并结束程序;4.计算手续费不是算全部取款金额的,而是超出余额的“部分”算手续费。

  ②增加用户、银行卡和银行账户时,要分清楚,容错率很低,不然排除很困难。

解决方法:

  ①在多次测验后,基本实现功能和要求。

仿真题目的设计思路分析总结

  最后两次作业都是仿真题目,模仿银联、ATM、银行账户、银行卡、银行用户。其中,在第一次做的时候我是自己设计的类,出的问题很大,因为我只将银联,银行账户,银行用户当成了实体类,导致最后实现困难。后面上课时,老师指出每一个对象都要设计实体类,于是代码重写,将每一个对象都设计成了实体类。不得不说,后面的设计贴近生活,并且灵活性大,有益于后期维护和增加功能,在每一环都可以互不影响。思路总结:一定要给每一个对象都设计实体类。

三、踩坑心得

  这三次作业明显强调了对于类设计的能力,设计好了类,后面出错也能很快解决。在敲代码的时候,时刻要考虑用户会如何使用,并且时时刻刻保持注释的好习惯。,题目中要考虑是否设计好,不然会造成后续更新时出错。

四、总结

  三次作业做完了,这三次作业对应的课程进度的速度比较能接受了,同时我也深刻发觉,继承、接口、多态这些操作对于JAVA来说多么重要,而且在实际运用上可以帮助我们实现很多功能,并且简化很多代码和操作。现在正值开始学习异常之时,不禁感叹,当初觉得难的内容总会在一次又一次的查询资料和实践中逐渐掌握。在这三周不仅有PTA作业,还有实验农夫过河,在PTA中学习到的新知识我都运用在了农夫过河中,也是不负这三次作业的投入了。正则表达式虽然掌握了基本内容,但是在复杂的文本面前我还是不知所措,需要更多的练习。在JAVA学习展开的这两个月,我认为我较好的学到了什么是面向对象的程序设计了。

  

posted @ 2021-06-17 18:06  木野kino  阅读(93)  评论(0)    收藏  举报