第三次Blog作业
Posted wananna
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三次Blog作业相关的知识,希望对你有一定的参考价值。
(一)前言
在这一个多月的时间里,我们进一步地学习了java程序的设计与编译,进一步深入地认识与理解了java程序。
在这段时间里,我们又进行了三次PTA题目集作业的提交,接下来我将会对这三次的题目集的特点进行总结和分析。
总体来讲,相对于前三次题目集来讲,这三次的题目集的任务难度逐渐加大,知识点更加丰富,很多分值较高的题目,对于java相关知识的考查,也从之前的单纯的“编写”转为了“设计程序结构”,很多分值较高的题目的难点也变成了“设计”和“逻辑”,而非编写代码的技术性难题。
第七次题目集
关于第七次题目集,我认为主要的知识点有三点,第一个知识点是父类与子类之间的继承关系,创建一个父类,在父类当中创建一个公有方法,之后创建带有相似属性的几个子类,继承父类,定义自己的属性,并且重写从父类继承来的方法,此外,还可以选择定义父类没有的、只属于自己的方法。第二是关于多态性的方法的使用,第三是对于接口的应用,一个类通过继承接口的方式,从而来继承接口的抽象方法。
关于题量和难度,总体来讲,我认为相对于前一个阶段(第4-6次的题目集)来讲,题目的题量明显减少,共有两道题,不过要按照题目要求设计出完整的类,还要考虑使用继承、多态、以及接口来简化代码,优化系统结构,考虑类与类之间的关系,以及相关方法的调用,题目难度加大了很多。
第八次题目集
关于第八次题目集,我认为主要的知识点有很多,比如类与类之间的关系,类的设计,对于不同情况下的数据进行分情况的计算,对于表中数据,使用一维数组或二维数组对数据进行存储,便于之后进行调用。在输出数据时,将数据按照规定的格式进行输出,并且保留两位小数。
关于题量和难度,我认为本次作业虽然只有一道题目,相对于之前的题目来讲,题量减少看很多,但是本次作业的综合性非常非常高,几乎涵盖了之前几次作业集当中的所有的知识点,并且还要考虑多个函数一起做同一个任务,类与类之间的关系等。
第九次题目集
关于第九次题目集,我认为主要的知识点也有很多,比如类与类之间的关系,类的设计,对于不同情况下的数据进行分情况的计算,对于表中数据,使用一维数组或二维数组对数据进行存储,便于之后进行调用。在输出数据时,将数据按照规定的格式进行输出,并且保留两位小数,大致与第八次题目集要用到的知识点相同。而且第九次题目集的题目就是在第八次题目集的基础上的迭代。
关于题量和难度,我认为本次作业虽然只有一道题目,相对于之前的题目来讲,题量减少看很多,但是本次作业的综合性非常非常高,也是几乎涵盖了之前几次作业集当中的所有的知识点,难度进一步加大了,综合性进一步提升了。
(二)设计与分析
对于7-1的问题首先,在一行上输入一串数字(1~4,整数),然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出Wrong Format。如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容为排序前的各图形类型及面积,格式为图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格;排序后的各图形类型及面积,格式同排序前的输出;以及所有图形的面积总和,格式为Sum of area:总面积值。
对于7-2的问题,如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出Wrong Format。如果输入合法,则正常输出,排序前的各图形类型及面积,格式为[图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前;
输出分组后的图形类型及面积,格式为[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出;各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;各组中面积之和的最大值输出,格式为The max area:面积值。
两次问题是递进式的设计,其中使用的知识点都差不多一样,都会使用到类与类之间的关系,正则表达式的判断,多态、继承等等知识点,第二道题使用到了更多的排序手段和正则表达式的判断部分。
对于第八次和第九次题目集当中的ATM机的的模拟程序的设计,其中第八次题目集的要求是能够完成用户的在本行存款、取款以及查询余额功能。第九次题目集的要求是能够实现用户的查询功能以及跨行存取功能。
两次的作业,我所使用到的设计思路都差不多,总结下来都是先对文档当中给出的ATM机数据,如下图所示
之后输入“# ”表示程序终止输入,如下图所示
之后对于输入的信息,根据空格进行字段划分,然后再根据字段的长度来进行判断,对于功能进行划分,让输入的信息,使用不同的函数,使用不同的功能进行对于数字的计算,或者信息的查询,如下图所示
之后再根据所判断的不同的功能进行数据的计算或查询。
(三)踩坑心得
在写第八次题目集的时候,也就是这个大作业系列刚刚开始的那一次题目集时,因为平时不使用银行卡,更多的使用的是支付宝和微信支付,所以对于银行政策和银行卡的规则不是很了解,刚开始没有理解银行账号和隶属卡号的关系,以为每一个人有一个银行的账号,每个账号可以由很多很多的银行卡,每一张银行卡都有一万元的初始余额,然后运行之后发现和用例当中的正确结果不同,后来才发现,原来一个人可以有一个银行账户,每个银行账户可以有一个或多个银行卡号,但是这些不同的银行卡是必须要共享银行账户中的一万元初始金额的,根据我的理解,也就是一个人在某一个银行当中开设了自己的账户之后,可以多开设几张卡,作为副卡,但是副卡也必须共享主卡(这个账户)当中的余额,不可以有自己专属的余额。第一次提交的时候我就忽略了这一点,导致结果错误。
对于不同的功能的划分,我使用的是对于输入的信息,根据空格进行字段划分,然后再根据字段的长度来进行判断,对于功能进行划分,让输入的信息,使用不同的函数,使用不同的功能进行对于数字的计算,或者信息的查询。我觉得这个功能可以通过这种方式来实现,这个时候使用正则表达式可能会让判断语句变得更为繁琐,不一定会达到预想当中的,使用正则表达式使得整个程序变得简单。
改进后的程序代码如下
(四)改进建议
我觉得对于题目集八中的第一题可以直接使用if...else...结构对各种不同的情况进行判断,而不用使用很多个不同的类,这样虽然看上去会让主类的代码较长,但是可以让程序整体更加简洁,去掉多余的繁琐的代码,去除多余的很多类和程序,使代码行数减少一些,提高运行效率和节省工作成本。
(五)总结
通过这三次的题目集,我学到了对于复杂问题的类的设计,以及对于每个类当中具体的构造方法的设计,对于多态、继承、接口问题的实际应用,对于各种知识的综合应用,这类的知识对于我们以后进行带有实际生活背景的问题的程序的编写有很大的帮助,比如现在在java课程设计当中,如果我们要做一个系统,需要实现用户的注册和登录,在用户输入用户名、和密码之后,我们需要使用正则表达式判断用户填写的新密码是否符合我们的格式要求。对于抽象类,抽象方法,父类与子类的继承关系,多态性、接口的实现等知识点更是让我受益匪浅,对于一些特定的程序,这些知识可以在以后我们面对它们时对其进行简化,提高效率,减少工作量。对于这些继承和接口方面的知识,我觉得我需要更进一步的学习与巩固,以便于以后更好更灵活的使用它们。
同时我觉得像题目集八和题目集九的两道题出的非常好,希望以后在PTA作业当中可以多让我们利用新学到的知识对于已经写过的较难的题目进行重构和迭代,对每一次的作业形成一个递进的关系,这样我认为可以让我们对新知识的理解更深更透彻,同时让我们更好的理解新知识的优点,激发我们学习新知识的兴趣。
对于继承,多态,类的设计和这几次用到的正则表达式的相关知识,我觉得我需要更进一步的学习,以便于以后更好更灵活的使用它们。而且本身新的程序的代码实现有了前一次的基础的话,新增的东西不会太难,更加侧重于对于结构的理解,以及对于整体逻辑的设计。
以上是关于第三次Blog作业的主要内容,如果未能解决你的问题,请参考以下文章