第二次博客作业(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)对课程组织等方面的建议及意见

引导我们爱上这片土地。

posted @ 2022-05-01 23:54  未皖  阅读(40)  评论(1)    收藏  举报