YiBao-0103

怡宝De代码之路

导航

Blog2-PTA图形+期中总结

前言

PTA三角形程序

  • 涉及知识点:
    • 设计符合条件的类,在类中适时重写equals方法便于程序的实现。
    • 使用DecimalFormat来进行数据的格式化输出。
    • 使用适当的方法判断输入格式是否达标,是否存在格式错误等情况。
  • 题量:比较大,一个题目中包含格式判断和5个需求。
  • 难度:比较大,在判断输入格式是否达标时我并没有掌握以及使用正则表达式的相关知识,不太知道如何用射线法去判断一个点是否在三角形内部,所以难度较大。

PTA四边形程序

  • 涉及知识点:
    • 设计符合条件的类,在类中适时重写equals方法便于程序的实现。
    • 使用DecimalFormat来进行数据的格式化输出。
    • 使用正则表达式来判断输入格式相关问题,判断输入格式是否正确,点的个数是否符合要求。
  • 题量:真的大!其中包含格式判断问题和5个选项实现问题,最多需要处理六个点的数据,从早写到晚,写的我逐渐看不懂自己的程序,别问,问就是写的心累。
  • 难度:比较大,使用了正则之后,难住我的不再是格式处理问题,而是各种选项的实现例如:

    要对输入数据进行各种假设,进行各种情况的考虑,考虑全面之后发现自己代码超出限制又不停地修改所以这道题对于我来说比较难。

农夫过河实验题

  • 涉及知识点:
    • 每次的实验是属于递进关系,从易到难,出题结构也很符合我们的学习进度。
      • 1.0版本:简单实现农夫过河游戏:设计类的声明与创建,方法的调用、重载。
      • 2.0版本:增加了Boat类和sheep以及wolf的名字、创建对象时的saying。
      • 3.0版本:使用适当的继承关系并且使用多态实现功能。
  • 题量:适中。
  • 难度:适中,与学习进度相符,可以很好的巩固所学知识。

期中考试题目

  • 涉及知识点:
    • 三道题属于递进关系,包含的知识点层层深入
      • 第一题:设计规定的规定的类和方法,对于类中属性进行封装,以及输入数据是否有效的判定问题。
      • 第二题:在第一题的基础之上设计一个抽象父类+抽象方法,原有的类进行继承,在此之上进行多态的使用。
      • 第三题:在前两题的基础之上增加容器类来保存相应对象,并且对容器进行相应的增、删、遍历操作。
    • 题量:适中,在我的可接受范围内。
    • 难度:适中,个人认为比图形题正常太多。

设计与分析

PTA三角形程序

  • 对应类图:
  • 解释:
    • 本题写了Point类和Line类进行功能实现,将每一个选项都单独立为一个方法进行处理,条理较为清晰。
    • 在处理用户格式输入问题做的不好,当时并未想到用正则表达式处理数据导致该方面做得较差,例如:
    • 在输出数据时由于要求
      所以使用了DecimalFormat来格式化输出数据,在下面的四边形程序中也进行了使用,DecimalFormat在处理相关数据输出要求时很好用!
    • 射线法:个人的理解是将该点与任意一点构成一条直线,再进行交点判断即可。
    • 心得:
      • 以后实现格式化输入判断时使用:正则表达式。
      • 以后实现格式化输出时(特别是有与四舍五入相关的)优先考虑:DecimalFormat。

PTA四边形程序

  • 对应类图:
  • 对应SourceMonitor分析:
  • 解释:
    • 从上面的类图以及SourceMonitor分析图可以看出这个程序很复杂,代码长,分支语句多,写代码时注释写得不勤,导致修改代码时有点困难。
    • 在此题中一共是有四个类分别是Line、Point、Triangle、Quadrilateral,有Triangle类存在的原因是有时候可以把四边形的问题转换成两个三角形的问题来求解,会更加简便。
      例1:
      此例是将四边形面积转化两个三角形面积之和,减少了直接计算的难度。
      例2:
      将判断一个点是否在四边形中就直接判断是否在两个三角形之一即可。
  • 心得:
    • 有时候复杂的问题需要拆分成一个一个的小问题,要足够耐心,这种方法不行就换另外一种,冷静思考,事情总会迎刃而解。
    • 在写复杂代码时养成注释的好习惯,否则自己真的可能看不懂自己的代码。

实验题

  • 1.0类图:
  • 2.0类图:
  • 3.0类图:
  • 解释:很明显经过几个版本的修改,这个程序也在不断完善,从开始只有简单的关联结构(虽然我开始就有简单的继承,但是用的不是很好)->增加Boat类、过河方法重载->封装、继承、多态,实验题在一步步的培养我们的面向对象意识,我觉得实验题的安排确实不错。
  • 心得:最大的心得就是在学习新知识的过程中,一定要在学习之后配合相应的练习去掌握和巩固!

期中第一题

  • 对应类图:
  • 解释:这道题就是根据题目的要求一步一步操作,比较简单。

期中第二题

  • 对应类图:
  • 解释:
    • 在第一题的基础上增加了抽象的Element类以及相应的抽象方法,主要是要记得在子类中实现抽象方法
  • 心得:
    • 注意题目中的类图要求,需要有无参构造和有参构造,在以后的开发中也要养成同时写无参构造和有参构造的好习惯。
    • 注意在一个类继承抽象类时一定要实现抽象类中的抽象方法。

期中第三题

  • 对应类图:
  • 解释:
    • 在原有类设计的基础上,增加一个GeometryObject容器类,其属性为ArrayList类型的对象,此时使用泛型,表明该ArrayList中的元素全部是Element类的子类。
    • add方法的实现直接调用ArrayList中的add方法即可。
    • remove(index)方法其功能为向容器中删除第index - 1,所以实现方法如下:

踩坑心得

  • 在写代码时注意不要写过多重复的代码,使得代码看起来非常乱,而且还因为代码长度超出限制无法提交,这种痛苦不想再感受第二遍了。
  • 在写复杂代码时养成注释的好习惯,否则自己真的可能看不懂自己的代码。
  • 在写图形类相关代码时,先考虑特殊情况,比如在判断直线和图形交点时首先判断该直线会不会过图形端点:
    再进行其他情况的考虑,从特殊->一般。

改进建议

  • 我觉得期中考试类似的题型蛮不错的,可以巩固平时的学习的知识比如抽象类,集合,继承等,还可以培养面向对象编程的意识。

总结

  • 收获
    • 实现格式化输入判断时使用:正则表达式。
    • 实现格式化输出时(特别是有与四舍五入相关的)优先考虑:DecimalFormat。
    • 深刻理解了封装、继承、多态,并且可以灵活使用。
    • 养成同时写无参构造和有参构造的好习惯。
    • 在一个类继承抽象类时一定要实现抽象类中的抽象方法。

posted on 2022-05-09 09:28  Yibao_0103  阅读(68)  评论(0)    收藏  举报