Blog作业02

题目集4~6总结

一、前言

  题目集合4~6主要考察了与JAVA类相关的概念,诸如聚合,继承,等概念,总体来说难度不大,题量也不算多,只是题个别题目目复杂程度较高,花费的时间多一点。

二、设计与分析

7-2 日期问题面向对象设计(聚合一) (35 分)

 

参考题目7-2的要求,设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1900,2050] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:

 

解题思路

该题比较简单,题目类图已经给出,只需将功能一一实现即可。

复杂度测试

 

类图

   

 

7-5 日期问题面向对象设计(聚合二) (40 分)

参考题目7-3的要求,设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:

 

 

解题思路

该题比较简单,题目类图已经给出,只需将功能一一实现即可。

复杂度测试

 

类图

   

两种聚合的比较

   聚合一像火车,一环扣一环,坏了任一环,火车跑不起,聚合二像乐高,准备好零件,在聚合在一起实现功能,某个零件坏了可以单独更换,更加成熟。

 

7-3 图形继承 (15 分)

编写程序,实现图形类的继承,并定义相应类对象并进行测试。

  1. 类Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积
  2. 类Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面积
  3. 类Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
  4. 类Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法public double getVolume();//求球体积
  5. 类Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法public double getVolume();//求立方体体积
  6. 注意:
  • 每个类均有构造方法,且构造方法内必须输出如下内容:Constructing 类名
  • 每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
  • 输出的数值均保留两位小数

主方法内,主要实现四个功能(1-4): 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;

解题思路

   比较简单的继承,依葫芦画瓢即可,比较简单

代码复杂度

 

类图

 

后继:

     7-5 图形继承与多态 (50 分)

改题目仅仅在上题的概念上增加了多态的概念。

   7-6 实现图形接口及多态性 (30 分)

此题又进行了一些小改动,仅仅增加了一个接口的概念,相信对于认真听MOOC的同学,30分包括上面的50分是十分好拿的,比较简单。

三题小总结

   这三个题目相比于前面的求导,和水位检测,的确可以说是十分基础简单的题目,仅仅涉及基础概念而已,没有复杂的过程和抽象的算法,入门水平而已。但有助于巩固基础。

涉及知识点

多态性是指同一操作(某一方法)作用于某一类对象(动物),可以有不同的结解释(重写),产生不同的执行结果。例如不同平台下按F1时有不同的解释
多态存在的三个必要条件
1 需要存在继承和实现的关系
2 同样的方法调用而执行不同操作,运行不同的代码(重写操作)
3 在运行时父类或者接口的引用变量必须引用其子类的对象
多态的作用
1多态通过分离做什么和怎么做,重另一个角度将接口和实现进行分离
2多态消除了类型之间的耦合关系
3多态的存在提高了程序的可扩展性和后期的可维护性

接口
1接口(interface)是抽象方法和常量值的定义的集合
2从本质上来讲,接口是一类特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
3接口中申明的属性默认为public static final 也只能是public static final的
4接口中只能定义抽象方法 而且这些方法默认为public的 也只能是public的、
5接口可以继承其他接口 并添加新的属性和抽象方法
6多个无关类可以实现同一个接口 一个类可以实现多个无关接口 接口与接口之间可以相互继承

 

③对三次题目集中用到的正则表达式技术的分析总结

   正则表达式是一个很好的工具,对于大量的数据提取和判断,起到了一个决定性作用,三次题目涉及到的正则,基本上把正则的基本概念涉及到了尤其是求导和水文检测,正则表达式很大程度上影响这后续的过程。

涉及知识点

Pattern

//基本匹配

        boolean b = Pattern.matches("a*b", "aaaab");

        System.out.println(b);

 

String的aplit的实现

//按照数字分割

        Pattern p=Pattern.compile("\\d+");

        String[] str=p.split("好456456像:0532214是");

        for (int i = 0; i < str.length; i++) {

            System.out.println(str[i]);

 

        }

一般使用Pattern.matches(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串. 

重点:#

  • matches 方法尝试将整个输入序列与该模式匹配。
  • lookingAt 尝试将输入序列从头开始与该模式匹配。
  • find 方法扫描输入序列以查找与该模式匹配的下一个子序列。 

// matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true

        Pattern p=Pattern.compile("\\d+");

        Matcher m=p.matcher("22bb23");

        m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.

        Matcher m2=p.matcher("2223");

        m2.matches();//返回true,因为\d+匹配到了整个字符串

 

       // lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true

        Pattern p1=Pattern.compile("\\d+");

        Matcher m3=p1.matcher("22bb23");

        m.lookingAt();//返回true,因为\d+匹配到了前面的22

        Matcher m4=p1.matcher("aa2223");

        m2.lookingAt();//返回false,因为\d+不能匹配前面的aa

 

       // find()对字符串进行匹配,匹配到的字符串可以在任何位置.

        Pattern p2=Pattern.compile("\\d+");

        Matcher m5=p2.matcher("22bb23");

        m.find();//返回true

        Matcher m6=p2.matcher("aa2223");

        m2.find();//返回true

        Matcher m7=p2.matcher("aa2223bb");

        m3.find();//返回true

        Matcher m8=p2.matcher("aabb");

        m4.find();//返回false

 

Mathcer.start()/ Matcher.end()/ Matcher.group() 
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息. 

  1. start()返回匹配到的子字符串在字符串中的索引位置.  
  2. end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.  即为最后位置加一
  3. group()返回匹配到的子字符串 

 

④题目集5(7-4)中Java集合框架应用的分析总结

   此题虽分值不高,但难度却一点不小

1、对关键字的检索

2、对关键字的统计

3、对干扰信息的过滤

主要的三大难点,一一攻克便可解决,然而此题涉及许多新知识,对于个人独立完成难度不小。

涉及知识点

Map集合概述和特点

概述:
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

Map集合的功能概述

a:添加功能
V put(K key,V value):添加元素。这个其实还有另一个功能?替换
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
b:删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
d:获取功能
Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
V get(Object key):根据键获取值
Set keySet():获取集合中所有键的集合
Collection values():获取集合中所有值的集合
e:长度功能
int size():返回集合中的键值对的对数

 

三、踩坑心得

可能是经过第一次题目集的洗礼,此次题目集并无太大阻碍,暂时无踩坑心得可分享。

四、改进建议

1、虽然信息不透明是提高题目难度的方法之一,但学生还是希望这这种基础练习中关键提示可以尽量给足,或者老师多回答学生不清楚的地方(概念相关)因为大家对于标准的理解是会存在偏差的。例如求导那题,听说最后一个点是老师数据给错了3+1给成了31导致浪费了大量的时间依旧过不了点。

2、希望题目集结束后给出答案,或者讲解,以供学习和借鉴。

五、总结

   题目量适中,难度适中,总结比较适合基础巩固。

六、心得

不足:知识点不全面,从题目中可以窥见,程序设计涉及的知识点十分的多,代码复杂度,类图,等等一系列的概念,而课堂时间有限,很多知识点不能涵盖全面,需要课下花大量时间自学,如果未认识到该点,只以解出PTA题目为目标的话,眼光是十分狭隘的,不利于后续学习,而编码能力,编码习惯,编码规划,更是需要大量的时间和精力去提高,仅仅只靠PTA是远远不够的。更不必提许多同学并没有理解软件工程的内涵所在,私以为软件工程重在设计,编码过程只是将脑海中的图纸实现的工具。我们要提高的除了编码能力,更重要的是逻辑,和设计思维。

 

posted @ 2021-04-26 17:13  whyxian  阅读(73)  评论(0)    收藏  举报