pta作业总结2
(1)前言:总结三次题目集的知识点、题量、难度等情况
总的来说,我觉得这三次题目的难度上较为合适,每次基本都是一道比较难的(尤其是第四次作业中的7-1 水文数据校验及处理、第五次作业中的7-4 统计Java程序中关键词的出现次数),剩下的都比较基础或稍微有一些难度。题量也还算适中只要不是拖着最后一天来做也是做完也是问题不太。知识点方面基本覆盖了现阶段所学的主要的重点知识,例如说:各种排序算法、正则表达式、封装、继承、多态、接口等等。
(2)设计与分析

7-3 图形继承

7-5 图形继承与多态

7-5 日期问题面向对象设计

7-6 实现图形接口及多态性
①题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较:
1.在思考对比这两道题目之前我们先说说set和get这两种看似简单但却很实用的方法里面的一些知识点吧
在java中,为了保证数据的安全性,我们会把数据定义为private等(私有、封装),如果想要调用就会用到set()方法与get方法或者构造函数方法。这里说的是第一种方法,set()与get(),既然说到这个,就得说一下封装的概念。
封装:private私有化成员属性,提供公开public的getter/setter
Setter:赋值 Getter:取值,在哪儿用:在构造方法中初始化属性值的用!!!!!或者对象名.set/get()进行使用!!!
好处:隐藏内部实现细节,保证代码的安全,同时也可以提升数据的安全性
访问修饰符,从访问的范围由小及大依次是:private default(当什么都不写默认就是这个) protected public
访问修饰符的作用:可以修饰类、接口、属性和方法。通常可以通过访问修饰符来改变所修饰对象的可访问范围。
2.关于这两道题我采用的基本结构是相同的主要的实现功能的方法包括getNextNDays(int n)、getPreviousNDays(int n)、compareDates(DateUtil date)、equalTwoDates(DateUtil date)、getDaysofDates(DateUtil date)、checkInputValidity()、isLeapYear(int year);
简单来说就是计算下一天、计算前n天、判断比较后面输入的日期是否大于前面的、比较两个日期是否相同、计算两个日期的差值、判断输入日期是否合法、判断输入的年份是否为闰年。而在主函数中则是通过
if-else的方法判断需要执行的计算。
3.关于这道题的优劣从我个人的代码出发说实话没啥区别因为我基本就是把聚合一的题目改了一下判断条件的输出的内容增加了一个很简单的方法就是聚合二
②题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等)
其实这3道题目有非常多的相通的点主要就是在封装、继承、多态、接口等技术的运用上。在具体介绍这三道题目的解题思路之前我们可以先复习一下这几种技术。
① 封装:
定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
封装的基本要求:把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的。
② 继承:
目的:实现代码的复用。
介绍:当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。有时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏,但是仍然允许子类的成员来访问它们。这个时候就需要使用到protected。
③ 多态:
概念:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同
Java实现多态有三个必要条件:继承、重写、向上转型
继承:在多态中必须存在有继承关系的子类和父类
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为
多态的实现方式:
(1)基于继承实现的多态
基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为
(2)基于接口实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可就是通过实现接口并覆盖接口中同一方法的几不同的类体现的
在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接,所以它相对于继承来说有更好的灵活性
④接口
1. 一个接口可以被多个类实现,一个类也可以实现多个接口。
2. 接口中所有的定义的字段默认jiek都是public static final 的属性,写和不写没有区别。
3. 接口中的方法都是抽象的方法,并且抽象的方法默认都是public abstract修饰的,不能用其他的修饰符修饰,可以不写。
4. 接口中没有构造方法
5. 接口不是类,尤其不能使用new运算符实例化一个接口。但是可以声明接口的变量,这个变量可以指向实现了此接口的子类。
简言之抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。
接下来我们具体看看这三道题有什么相同点和什么不同点,这三道题都有一个相同的主题就是图形的继承和多态,几种计算图形面积的公式方法也都有所使用。要说有什么不同那主要就是输入和输出格式的不同了。
③对三次题目集中用到的正则表达式技术的分析总结
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
这三次题目集中涉及到的正则表达式大多是为了和已给出的数据形式与内容相对应,例如作业6的7-4 正则表达式训练-学号校验这道题,使用20201[1-7][1-3][0-9]||202061[1-3][0-9]||20201[1-7]40||20206140这个正则表达式就已经可以解决在已经判断输入的字符串合法的前提下所以需要判断的条件了,可以说正则表达式将关于字符串内容下各字符的校验和判断有着天然的简洁与准确的优势。
④题目集5(7-4)中Java集合框架应用的分析总结
说实话这道题我是0分,从一开始看这道题就有点懵圈我开始连53个关键字的不知道是个啥(后面百度才知道的),对关键字的查找和排序我也没有头绪(可能是因为我的正则表达式没有过关的原因吧),
为了弥补这个遗憾我就在这里大概给出我的关键思路:1.判断输入内容是否合法;2.循环找每个关键词出现的次数;3.创建关键词的正则表达式;4.字符串与关键词匹配;5.找到该关键词的话,记录该关键词的次数;6.把次数不是0的关键词替换为次数;7.将字符串m转化为n;8.把m里的"{""}"去掉存入字符串n;9.把m根据", "分开,存入字符串数组m1;10.把每个字符串m1根据"="分开,存入字符串数组m2。
(3)采坑心得
1.注意输入变量的对应关系,作业6 7-5 图形继承与多态这道题就是因为搞错了圆形和矩形的对应关系导致输出对不上输出样例,因为没有怀疑这么低级的问题所以找了很久都没找到错在哪。
2.在写那两道关于日期的题目时,一定要注意跨月和跨年时引起的关于日的变化以及在计算日期差值时要注意闰年和2月的特殊性。
3.注意题目规定的输入输出格式。
(4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进
关于实现图形的继承与多态性这几道题可改进空间还是比较大的在原题的基础上可以增加各种图形甚至是立方体的面积或者体积的计算公式的方法。还有日期聚会的也可以通过增加方法来实现更多的关于日期计算的问题。
(5)总结
通过这三次作业我学到了封装、继承、多态、接口、正则表达式等常用知识点,对于课堂方面我希望老师能够更多的讲下我们写过的作业,还有就是课堂上的作业尽量给多点时间(ps:我的基础太差了有点跟不上),最后我觉得整体的上课效果和布置作业的难度和频率还是合适的,当然作业再简单点就更好了

浙公网安备 33010602011771号