第二次博客作业(2022/5/1)
在第七周到第十周的学习中,我们继续探索Java这片宽阔的土地。
实践出真知,实践是成功唯一的途径。
-
(一)前言
(1)知识点
1、 掌握Java语言中final关键字的含义及使用方法;
2、 掌握Java语言中抽象类的基本概念及使用方法;
3、 掌握Java语言中接口的基本概念及使用方法;
4、 理解程序设计中常用数据结构的用法;
5、正则表达式。
(2)题量
截至目前,pta已布置两次作业,题量为:
5 + 3.
布置了一次期中考核题,题量为三道。
分别是点与线问题的类设计、继承与多态和容器类问题。
慕课作业有一次,
是根据视频中实现的功能,写一个MP3的子类,实现display的功能;
学习通上实验发布一次实验,
为抽象类与接口;
雨刷问题已经结束。
(3)难度
pta 两次作业中都有难题,
比如恐怖的ATM设计,自己类设计并实现的时代终于要开始了吗?
ps:它后面标了(1)。
比如恐怖的点线形系列(4),
不懂就问,是不是数学没教完的部分,嘱咐了Java要让这群孩儿学会的呢?
慕课作业不算难。
学习通的实验难,需要细细设计,清晰逻辑,掌握结构,不仅如此,还要不断学习改善。
-
(二)设计与分析
(1)
pta题目集六
浅正则匹配一下吧。
先来个import,
import java.util.regex.*;
再来两个String,
String str = in.nextLine();//输入语句
String pattern = "([2][0][2][0]([1][1-7]|[6][1]|[7][1-3]|[8][1-2])([0][1-9]|[1][0-9]|[2][0-9]|[3][0-9]|[4][0]))"; //给个正则表达式
用个方法来匹配吧,
Pattern.matches( pattern,str) 返回值为布尔值,
即匹配正确为true,失败为false。
咱就是说要注意这两个String的前后位置啊。
然后有个很好用的字符(|),
就是说情况有分支怎么办?
用 | 隔开最好办。
x | y 意为匹配 x 或者 y.
当你要用到 / 这个符号时,
注意java会吞掉一个 / 啊。
于是 //D 才表示除数字以外的任意字符,
ps :它能匹配一或多次。
匹配一次或多次,用什么字符呢?
没错,就是+。
那?呢,它是零次或一次。
你想知道还有什么类似的符号吗?
有的哦,* 表示零次或多次。
那能不能表示具体的什么次数啊?
也是可以的。
咱就用{}吧。
{n},表示匹配n次。
{m,n},表示匹配至少m,至多n次。
{n,},表示匹配至少n次。
诶诶,还有个[],
咱就是说,非常神奇,如果里面的字符加了-,
ps:这个-也得有意义啊。比如a-z。
它就表示一个范围,范围内都能匹配的。
那就有人要问了,要是不加-呢?
问得好!
不加-的话,它就表示几个里面的或关系了,俗称要么要么。
比如 az 表示要么匹配 a 要么匹配 z 。
(2)
pta题目集七
有道题涉及了输入输出的交替是吗?
这意味着输入语句和输出语句要隔开了,仅此而已。
这时候也不能一下子全输入进来了。
我们要在一行啥都有的句子里提取整数?
可以用 String[] num = str.split("\\D");
然后这些数就能被隔开了。
(3)
期中题
分别是点与线问题的类设计、继承与多态和容器类问题。
主要是通过类图来实现代码。
有几个点需要注意:
比如吧,在慕课里学习到的说,
print()实现了多态,然后在一个类里的print()调用了另一个里的print(),
这时候吧,我们就满足了当这个类需要另一个类的输出的要求。
再比如呢,我们定义一个Element类的引用,分别使用该引用调用四个子类对象的display()方法,从而实现多态特性。
代码如下:
element = p1;//起点Point element.display(); element = p2;//终点Point element.display(); element = line;//线段 element.display(); element = plane;//面 element.display();
注意啦,这就是慕课里说的向下造型,即父类对象当子类对象用。
再再比如啊,增加一个GeometryObject的容器类时候,它有一个属性为ArrayList<Element>类型的对象,
这时候,这个对象的作用就很突出啊,它不就是容器吗,
然后啊,这个规定的类型是被泛化的,所以咱可以把这四个类加进去,怎么加呢?
可以使用ArrayList里的add(Element element)方法加进去。
怎么删掉呢?
可以使用ArrayList里的remove(index)方法把它删了。
怎么输出呢?
代码如下:
for(Element e : cor) { e.display(); }
通过一个foreach循环,一一输出了。
(4)
实验

//这是实验四中给的类图,一下子就搞的人不知所措。
然后从abstract入手,从类图中类之间的箭头入手,大概了解类之间的关系。
主要有三类,规则类、人物类和交通工具类。
这时候农夫要选择带什么,然后让要带的上船,改变其过河状态,
再用规则类判定游戏是否结束,如果不,继续选择。

//运行结果截图
通过实验我了解了接口可以被多实现,可以有多继承。
-
(三)踩坑心得
# 在设计字符的比较里,注意字符要用单引号括起来嗷,
如果涉及数字啥的,不加括号,一不小心就去比较ASCII值去了。
# 重构代码之前不做规划的话,我们要花更多的时间边重构边理解。
-
(四)总结
(1)综合性知识小节

//Comparator接口反向排序
# Eclipse 里 source - format可调格式(对齐之类的)
链表里的一个个node是通过指针域链接起来的,
在Java实现链表时,我们创建一个包含数据及其指针域的对象,
通过创建对象 - 输入数据 - 创造链接的步骤完成链表的创建。
在单向链表中,头结点(head)的指针域指向第一个数据,第一个数据的指针域指向第二个数据,
尾结点(tail)与头结点不同,它是包含数据的,头结点不包含。
# 所有collection都是容器类型,容器内可装对象。
list中可以有重复元素,而set中不可以。
# 测试方法和技术
IPO
Input ---- Process ---- Output
1.边界值测试
2.等价类测试
# 正则表达式
# 格式化输出
String.format() 可以实现格式化输出,可用 “+” 连接起来输出。
System.out.printf()也可以,但不能连接输出哦。
# 输入
in.next() 可以读取输入的一行。
以\t、\r、\space 为结束。
in.nextLine() 可以读取输入的一行。
以回车为结束。
#一些逃逸字符
\b 回退一格(在Eclipse里不管用的) \\ 反斜杠本身
\t 到下一个表格位 \r 回车
\n 换行 \" 双引号
# 向上造型与向下造型
拿子类的对象,当父类的对象来用,就叫做向上造型。
拿父类的对象,当子类的对象来用,就叫做向下造型。
向上造型是默认的,也是安全的。
# super.+函数 可使用父类public的函数。
protected 访问权限:同一个包里的其他类与自己的子类可访问。
(2)预计进一步学习及研究内容
1.了解工具、集合框架类的方法
2.阅读阿里巴巴Java开发手册
3.继续读厚厚的《Java语言程序设计》
4.针对学习B站里的系列Java教学课程
(3)对课程组织等方面的建议及意见
引导我们爱上这片土地。
浙公网安备 33010602011771号