面向对象程序设计PTA习题集7-9学习心得

Posted on 2021-06-11 09:31  tomehay  阅读(129)  评论(0)    收藏  举报

面向对象程序设计PTA习题集7-9学习心得

一、前言:

在五月份中OOP课程的学习当中,我完成了习题集7-9的作业,这三次的作业,随着课程的深入,题目运用到新知识点更多更难,同时也体会到了新学到的知识点的实用性。

题目集7-9总共就四道题目,平均下来每道题75分,题目也并不像之前题目3或4那样那么的困难,完成起来的的难度并没有之前的那么大。

在这三次的题目集当中,主要使用的就是ArrayList的使用及其的一些方法的使用,这三次的练习,让我初步了解对ArrayListlist的使用,为之后的学习打下基础。

二、设计与分析

首先说说习题集的第一题,第一题当中已经给出了要求的类图与主函数中的内容,主要是向我们介绍什么是ArrayList以及的一些基本使用方法,同时在题目中有要求让我们使用compareTo方法的对于图型的面积进行排序以输出,同时又要计算总的Area面积总和。由此就很容易想到在图形类之中定义检查数据正确性的方法以及计算方法。同时最为重要也最难的是,DealCardList类的使用,首先是使用循环以此输入需要使用到的图形类别,并且使用ArrayList存储,在这之后调用DealCardList方法进行处理,同时使用get()方法及getShape()方法调用每个类中的validate方法进行数据的检验,最后排序并输出。

接下来的是7-2,这道题是7-1的难度加大的改良的版本,主要是难在后续需要对每个图像的不同面积进行排序并输出,这样就加大了ShowResult()的代码长度,我自己的ShowResult方法写了84行,主要的问题是,题目要求输出三次,第一次输出时要按照输入的顺序来输出计算好的图形名及图形面积,而第二次输出时需要按照特定的顺序对图像进行输出,为实现这项功能,我在DealCardList类中重新定义了各自图形的ArrayList,并在循环的最后的后使用add方法加到相应的ArrayList当中,这样做的目的是,在最后的输出当中,使用list.sort方法进行排序并输出,最后还有一个要求便是,要对每个图形类的都要计算面积总和并输出面积最大一个图形类的数值,这里可以使用数组对每个单独的图形面积存储下来,并使用arrays.sort方法排序后输出数组中的第一个素。

 

 

 

 

 

以上是我在习题集七之中,第二题中的sourceMonitor软件中的报表内容以及使用powerDesignner得到的类图设计。

总的来说是让我们简单应用ArrayList等知识点的两道题题目,同时在完成这两道题目中,也可更好的理解先前学习到的继承封装方法,以及进一步的让我认识到面向对象程序设计的便捷以及实用。

接下来的就是,习题集八之中的ATM机类结构设计做这题的开始中,并没有很多的条件限制,所以我就用简单的逻辑判断将这道题写出来了,后续老师在群里发了更多的要求之后我又对自己的程序进行了一定的修改,接下来,我会对这两段程序进行相应的比较,在我的代码当中,主要是使用了水文数据当中用正则表达式处理数据的方法,将所有的信息输入,然后再根据数据的情况进行if else语句进行判断,这样写的程序并未超出代码长度限制同时代码行数也就一百多行,但是问题是,这样写出来的程序并不能对新学到的知识进行练习,不能很好地锻炼自己的编程能力,就像罗海平老师上课说的那样,这样写虽然不会影响你的面向对象程序设计这门课的成绩,但是对于你自己的编程大成绩的,是有很大的影响的,所以在老师的具体要求出来之后,我对我自己的代码进行了一些修改。

修改后的代码虽说对数据的处理方式与之前的方法并没有很大的差别,但是在类的之中,是使用对象数组的实现了类的包含,比如说,用户有多张银行卡,所以在用户类的设计中,我使用了银行卡对象数组,实现了老师在课上所说的单一职责原则,同时也提高了代码的可读性,调试输出时,不必像我调试我之前的写的代码一样输出错误了只能一段一段的去找在哪里输出的,然后还特意的设定使用多个整型变量对数据判断。

接下的是习题集九的ATM类设计(二),这道题与之前的习题集八主要的区别是,多了借贷卡,允许了透支操作,但并不是所有的银行卡都允许这么操作,所以,自然而然的,这就又多出来一个判断的条件,但是与此同时的是,ATM的柜员机的数目变多了,甚至允许了跨行取款的操作,每家银行的利率由都不一样,所以这就使得代码的难度比之前多上了一个台阶,不过,题目并没有要求存款手段,这在一定程度上减轻了题目的难度。但是其实也还好,主要的涉及到了一些的逻辑思考的问题,但在知识点的层面并不是非常非常难的,主要是复杂在代码的编写,因为要对不同的数据取得相应的计算方法,这样才可以得到正确的余额,同时应该对代码的长度进行把控。以及最重要的是,明确好每个用户在不同银行的不同柜员机上的取款数目的计算方法,这样才会使得程序得到正确的输出,才能圆满的获得这一题的全部分数。                                                                                       

三、踩坑心得

平心而论,我在这三次的PTA习题集中踩了许多的坑,走过许多的弯路的,不过,令人十分欣喜的是在一次又一次的修改代码之后,看着PTA上的分数比之前多了那么一些,都会觉得十分有成就感。

在习题集七的第一题之中,遇到过的主要问题是,在输出时,程序并没有按照正确的顺序得到输出,同时由于在类中忘记使用了getter&setter方法就导致了后续运行时报错。经过改进发现,是排序的方法出现了问题(一开始我是用的自己编写的冒泡排序方法),在经过同学提醒后想起来arrays.sort方法,以及在这题出现的非常低级的错误是,在计算梯形的getArea方法公式写错了,导致在输出时并未得到正确答案,经过全方位细致的调试与修改,最后才获得了全部的分数。

接下来就是第一题的升级plus版,正如上述所说,第二题是比第一题要多了许许多多的要求的,但是这题的大框架已经是在第一题中就已经搭建完毕了,所以在代码编写之中并没有很多的难度,主要的问题就是,在最后的输出时,每一个图形都必须要有[]符号包围,所以就略微的繁琐了一些,这道题并没有花费我太多时间在调试之上,主要的就是另外一个低级错误:输出最后的面积时,我以为是输出全部图形类的全部图形面积总和,这属实让我困扰了一阵子,一直在寻找求和时问题所在。

现在就到了问题重重的习题集八和习题集九了,这两道题在起初属实是让我十分困惑,在我一开始使用自己的方法编写程序时,遇到的问题主要是如何去正确的处理查询余额功能,在单独输入银行卡账号后也能也能得到账户余额但是在输出时得到的结果并不一样,所以这就有了一些的问题,但这处理起来也十分简单,主要的问题就是,我一开始并没有按照规范了编写程序出现了较大的问题,如果我不重新按照要求编写程序的话,我想我的习题集八的题目编写起来会十分的困难。

在习题集九中间,因按照要求书写到吗,所以就少走了许多的弯路,不过在编写程序的时候也时bug层出不穷的,每次修改好程序,点提交按钮时,心情都会坎坷,因为在调试时,分数永远都是十分十分的上升的,有时候更是维持原来的成绩,最后看到分数到了90确实是十分的欣喜的,但后续的那十分的情况一直找不到哪里出错了,也就搁置了,放弃了这十分。

四、改进建议

对于这几次的习题集来说,感受到的心得就是,写代码一定要条理清晰,这样才有利于自己后续修改,同时在以后的工作当中,这样也会利于自己的工作效率,同时要注意写代码是一定要写注释。

五、总结

在这三次的习题集训练之中,我了解到了新学到的知识对于编写程序的重要性,这种感觉在一开始没按照题目要求编写代码而问题百出后的体验更加明显一些,通过新学到的知识改进代码的这也是我们学习这么多知识的目的,以前其实并没有那么深刻的感受到新学的知识的作用,只是觉得这些知识有用,利于后续的学习,每一次习题集中运用到新的知识也就是觉得新学到的知识应该去使用,这样才能掌握好知识,但在这次的习题集中,很明显的感受到使用新的知识得到的便利,在以后的其他科目的学习中,我将尽可能的使用新的所学知识,写出更好的代码!