OO主题集总结4~6
前言:
第四次作业:
这个赋值第一次使用继承方法和正则表达式。正则表达式第一次接触是在水文数据验证和管理方面,对我来说有点难。以下是关于正则表达式和继承的一些知识点的总结。
1)正则表达式:
正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找和替换符合规则的字符串。
使用正则表达式解决问题可能需要很多字母或特殊符号来表达,找到符合题目要求的字符含义可能需要一些时间,但正则表达式在减少代码量、改变代码复杂度方面起到了很大的作用。
遇到正则表达式方法的具体问题需要自己咨询。
2)继承:
继承是面向对象的两个特征之一。继承是一种使用现有类定义作为基础来构建新类的技术。新的类定义可以添加新的数据或新的函数,或者使用父类的函数,但不能选择性地继承父类。例如,圆是一个图形。一个圈子有传承人的特点,也有自己的特点。通过使用继承,我们可以更方便地重用以前的代码,大大提高开发效率。
A.继承首先要满足“A是B”的条件,然后A才能继承B,B是父类,A是子类。
B.除了那些私有的,还有子类不能继承的构造函数。对于构造函数,只能调用,不能继承。调用父类的构造函数时,请使用super()。
c对于protected,它指示的类的用户相当于private,但是它可以被从这个类继承的任何子类或者位于同一个包中的任何其他类访问。
第五次作业:
这个作业仍然写面向对象的日期。对我来说,在Java中统计关键词出现的次数是最难的。我需要自己查询Java的53个关键词,通过List/Set/Map的一个或多个界面来实现。
Java中的多态有两种形式:继承和接口。继承是单一继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,继承起来更灵活。
映射初始化:mapstring,stringmap=newhashmapstring,string();
插入:map.put('key1 ',' value 1 ');
Get元素:map.get('key1 ')
移除元素:map . remove(' key 1 ');
空map:map . clear();
2)Java关键字是预定义的标识符和变量,在计算机语言中具有特殊的意义。它们用于表示数据类型或程序结构等。关键字不能用作变量名、方法名、类名、包名和参数。
第六次作业:
这是我第一次接触到水文数据验证和管理中的正则表达式。这道题本身比较难,可能并不能很好的解决题中所有的考点。在第六次作业中,老师准备了四个关于使用正则表达式的简单问题,让我可以更好地使用正则表达式。这个赋值仍然是正则表达式的实践和Java封装、继承和多态的实践。
作业过程:
主题4
7-2日期问题面向对象设计(汇总1)
设计和分析:
这个题目就是用封装和继承的方式来编译题目的类图,从而达到找到n天,找到前n天,找到两个日期差的天数的目的。其中,周期法体系。out.println (localdate.now()。Toepochday ()-localdate.now()。天数(5)可用于查找一个月内不同日期的天数。
踩坑体验:
标题要求是设计DateUtil、Year、Month、Day四个类,但是只设计了一个DateUtil类,年、月、日都设计为私有,不符合标题要求。要求n天时,最后一次输入的日期不正确,最后一个考点没有通过,没有满分。
1类日期
2私人国际年;
3个私人国际月;
4个私人国际日;
五
6 public int Getyear(){ 0
7个回归年;
8 }
九
10公共作废setYear(int year){ 0
11今年=一年;
12 }
13
14 public int getMonth(){ 0
15个返程月;
16 }
17
18 public void setMonth(int month){ 0
本月19日=月;
20 }
21
22 public int
getDay() {
23 return day;
24 }
25
26 public void setDay(int day) {
27 this.day = day;
28 }
29
30 DateUtil(int year, int month, int day) {
31 super();
32 this.year = year;
33 this.month = month;
34 this.day = day;
35 }
36
37 DateUtil() {
38
39 }
改进建议:
这次关于求下N天的日期,修改了很久也没有通过测试点,输入1 1999 3 28 6543时,测试结果显示2017-2-25,但正确的应该为2017-2-24,希望找到漏洞,将程序最终修改正确。
题目集5
7-5日期问题面向对象设计(聚合二)
设计与分析:
这道题偷了个懒,用了题目集4关于日期问题面向对象设计(聚合一)的思路,没有使用新的思路。
踩坑心得:
这道题通过测试在求下N天依旧是输入1 1999 3 28 6543时,测试结果显示2017-2-25,但正确的应该为2017-2-24,但这道题测试点通过,通过debug还是没有找到问题所在。
1 if (isLeapYear(date.year)) {// 闰年 2 if (leapYear[date.month - 1] == date.day) {// 月底 3 date.month++; 4 date.day = 1; 5 if (date.month == 13) {// 年底 6 date.year++; 7 date.month = 1; 8 date.day = 1; 9 } 10 } else 11 date.day++; 12 } else { 13 if (noLeapYear[date.month - 1] == date.day) {// 月底 14 date.month++; 15 date.day = 1; 16 if (date.month == 13) {// 年底 17 date.year++; 18 date.month = 1; 19 date.day = 1; 20 } 21 } else 22 date.day++; 23 } 24 return date;
改进建议:
关于日期类问题,求上N天或者下N天,N值较小时数据是准确的,当N过大时候,就出现了上述的情况。
7-4统计Java程序中关键词的出现次数
踩坑心得:
一开始这道题读题不够认真,理解错了题目的意思,以为是找出关键字的个数,直接输出一个数字即可,后面看到给出的输出样例发现并不是这样。除此之外,这道题需要注意的是,如果是注释里出现的关键字不需要统计关键字的数量。
编程的严谨性依旧是不容忽视的一个问题,Java的53个关键字由于不够严谨,导致传入HashMap时多加了空白符导致出现bug,多次测试才找到最终问题所在。
1 //写入代码 2 while(!(str = input.nextLine()).equals("exit")) { 3 list.add(str); 4 } 5 if(list.size() == 0) 6 System.out.println("Wrong Format"); 7 //去掉注释 8 ArrayListString newList = DealCode.filterNotes(list); 9 10 //判断 11 for(int n = 0; n newList.size(); n ++) { 12 String[] array = DealCode.spiltString(newList.get(n)); 13 14 for(int m = 0; m array.length; m ++) { 15 DealCode.judge(map,array[m]); 16 } 17 }
判断关键字:
//判断是否是关键字 public static void judge(MapString, Integer map , String str) { if (map.get(str) != null) { int num = map.get(str); int m = num + 1; map.put(str, m); } }
改进建议:
这道题HashMap、Map、Set等接口都是首次接触,还不够理解和熟练,这道题也是通过别人讲解才能略懂一二,希望此类比较新颖的题目老师在今后可以讲解。
题目集4
7-3 图形继承
设计与分析:
对于类Circle、Rectangle继承类Shape,类Ball又继承类Circle,类Box继承类Rectangle,每个类的属性均为private,用到getter和setter方法。
对于四种合法输入:圆半径、矩形宽长、球半径、立方体宽长高,用switch解决。
踩坑心得:
注意输出为float类型
String str = String.format("Circle's area:%.2f", circle.getArea());
String str1 = String.format("Rectangle's area:%.2f", rectangle.getArea());
String str2 = String.format("Ball's surface area:%.2f", ball.getArea());
String str3 = String.format("Ball's volume:%.2f", ball.getVolume());
String str4 = String.format("Box's surface area:%.2f", box.getArea());
String str5 = String.format("Box's volume:%.2f", box.getVolume());
题目集6
7-5图形继承与多态
设计与分析:
多态简单的理解就是对象在不同情况下的不同表现,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。本次作业采用的是抽象类定义、实体类构建的方式。即 Shape 为抽象类,Circle、Rectangle 及 Triangle 为实体类。
class Triangle extends Shape
class Rectangle extends Shape
class Circle extends Shape
abstract class Shape implements ComparableShape
关于泛型:
a.泛型作用: 限制加入集合中元素的类型,将类型限制为同一种类型。泛型在编译期间生效,不允许加入其他类型。
b.定义泛型类的语法格式:
类访问修饰符 class 泛型类名 类型参数 {
类体
}
c.泛型接口的定义格式:
interface 接口名类型参数列表
{
...
}
d.在实现接口时,也应当声明与接口相同的类型参数:
class 类名类型参数列表 implements 接口名类型参数列表
{
...
}
7-6实现图形接口及多态性
封装继承多态我认为是逐步递进的一个过程,多态的前提就是封装继承,有了这样的前提,我们可以进行方法的重载和重写 ,使得代码更加灵活简洁,可读性更强。
一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
总结:
这三次作业主要是对于面向对象的三大特性:封装、继承、多态的题目练习,关于接口的题目练习,关于正则表达式的题目练习。
面向对象程序设计的三大技术特性:封装,继承,多态。在作业过程中逐步加深了对这三个特性的理解,每一个类的设计都要求属性私有,同时设置私有属性的getter,setter,每一次题目中都能体会到封装性;图像继承的一系列题目中,父类子类由大到小,体会到了设计的继承性;在抽象类接口类中,子类重写父类的方法,更加灵活,体会到了多态性的实际运用。
接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。因为Java不支持多继承,所以Java可以通过实现接口来弥补这个局限。 为了声明一个接口,我们使用interface这个关键字, 为了实现这个接口,我们使用implements关键词去实现接口。
关于使用正则表达式解决问题,可能需要使用到很多字母或特殊符号才能表示,查找符合题目要求的字符含义可能需要一定的时间,但是正则表达式在减少代码量以及改变代码的复杂度上起到了很大的作用。
这一周期的作业含金量很大,学到了很多面向对象的专业知识,但一部分首次接触难于理解,部分类型的题目对于我而言还是有一定的难度,希望在今后的学习中可以巩固之前所学的知识并且深入对面向对象编程的了解,做到温故而知新。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/88686.html