目录
一、前言
二、设计与分析
三、踩坑心得
四、改进建议
五、总结
一、前言
(1)PTA大作业五前言:
此次作业已经是我们学习中期的一次作业了,作业内容较为综合,考察知识点较为多样,增加了很多自学知识点(如:正则表达式的应用),由于学习过程的推进你,在此后的作业、考试中均运用了类(class)方法,增加了代码的可读性和使用性,对代码的修改更加便捷,题目的复杂性,更是对我们寻找关键内容进行了加强训练,使我们即便在多样的实际应用中,也能找到正确的问题理解。经过此次作业,使我们对类与对象的关系有了更深刻的认识。
(2)期末考试前言:
期中考试的三道题目是循序渐进的过程,难度也是层层递进,运用的方法也是不同(如:类设计、继承与多态、容器类),再根据题目所提供的类图,写出代码。综合考察了前半学期的知识掌握情况,在大的知识点下还包含了一些实用的小知识(如:抽象类、父类与子类),经过这次考试,不但使自己了解了有哪些不会的、不懂的、不熟悉的,还是自己巩固了这些方法的应用。
(3)OOP实验题:
到目前为止,已经写过了三次实验题(实验三(1)、实验四(1)、实验五,同样三道题目是循序渐进的过程,难度也是层层递进,每次的实验都包含了近期学过的知识总结运用。
题目具有创新性,考察方式具有灵活性,并且学习了JavaFX。
(4)难度总结:
难度相比于PTA大作业前三次作业相比,难度加大,灵活性更高,题目更加复杂,让我对JAVA更加熟悉,运用方法更加了解。
(5)得分情况:(括号内为自我评价)
1.PTA大作业四:57/100(极差)
2.期末考试:40/100(差)
3.实验题:通过
(6)知识点:
PTA大作业五: 1. 类与对象
- 基本运算语法
3. 正则表达式
期中考试: 1. 私有属性(private)与公有属性(public static)的应用
- 类与对象的关系
- 父类与子类(extends)
- 抽象类(abstract)
- 继承与多态数值均保留两位小数(String.format("%.2f", data))的方法。
- 容器类
实验题:1. 类与对象的关系
- 父类与子类(extends)
- 抽象类(abstract)
- 继承与多态
二、设计与分析
①PTA大作业四(7-1):
本题大致意思:先进行输入,再经过算法计算,最后输出
输入:一段带数字的文字
输出:每行文字里的数字之和
思路:对输入的文字运用正则表达式通过以文字分隔开(split),最后用循环进行计算和。
此次作业要求运用正则表达式进行作答,对于正则表达式,可以说是小白,所以进行了资料查询,以下内容是有关正则表达式的知识点
②PTA大作业四(7-2)
本题大致意思为:
先给出不同的选项,再选好选项后进行相应的输入,然后对输入数据进行分析判断,最后进行该选项的正确计算后输出。
输入:先输入选项(NUM+:+num),再输入数据(不是统一的)。
输出:先判断后计算。
思路:将输入的数据先存放在字符串中,在将第一个数字提取出来,过滤掉分号。先以空格为标志分离数据,将分完后的数据存放在字符串数组中,在以逗号为标志继续分离,同样保存在新的字符串数组中。再然后进行判断是否合法,如若合法则按照选项规则进行运算后输出。
以上代码是判断是否构成相应图形
③PTA大作业四(7-3)
本题大致意思为:
设计一个银行类,再这个类中包含开户、存款、取款、欢迎、再见、提示等功能,在Main函数中,实现类的方法。
输入:根据提示输入相关数字、字母(如:姓名、密码、取款金额、存款金额等)
输出:根据客户的输入而输出相应文字
思路:先建立一个类,在类中编写方法,实现功能。通过Main调用BankBusiness类带参数的构造方法。
先是通过Main调用BankBusiness类带参数的构造方法,以此实现功能
这是使用程序的开始和结束语句,欢迎和再见。
利用双层判断(if、else)语句进行判断账户的密码、余额是否正确、符合。如果不符合则进行提示。
使用this关键字获取数据,然后对数据和输入内容进行判断输出语句。
④期中考试(7-1)
本题大致意思为:
根据题目要求和类图提示进行代码编写,实现点与线之间的关系,类与类之间的关系(父类与子类),先输入数据,然后对数据进行合法性判断,如果输入不合法则退出循环且输出相应语句,如若合法,则进行算法运算。
输入:输入数据,最后以end结束
输出:对输入数据进行算法运算后,输出相应的格式
思路:输入后,利用if语句进行判断合法性,然后进行算法计算。
以下为本题类图:
Point类中的方法,用于获取输入的数据,然后利用关键字this进行保存。
Line类中的方法,用于获取输入的数据,然后利用关键字this进行保存。
这是Point中的display方法,当i=1时为真(即取款大于存款时)输出相应文字,当i=2时为假(即取款小于存款时)输出相应文字。
⑤期中考试(7-2)
本题大致意思为:
在原来题目的基础上增加一个新的类Element作为其他两个类的共同父类,再在Main中然后定义一个Element类的引用,分别使用该引用调用以上四个对象的display()方法,从而实现多态特性。
输入:输入数据,最后以end结束
输出:对输入数据进行算法运算后,输出相应的格式
思路:输入后,利用if语句进行判断合法性,然后进行算法计算。
以下为本题类图:
以上方法为继承和多态。应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
以上方法利用了抽象类。抽象方法可以隐藏具体的细节信息,所有的子类使用的都是相同的方法原型,其中包含了调用该方法时需要了解的全部信息;强迫子类完成指定的行为,规定所有子类的“标准”行为。
⑥期中考试(7-3)
本题大致意思为:
在原来题目的基础上增加一个新的类GeometryObject,利用数组列表完成代码,将类GeometryObject作为容器,向其中增加Point、Line、Plane对象,并再此类中增加判断。
输入:输入数据,最后以end结束
输出:对输入数据进行算法运算后,输出相应的格式
思路:输入后,利用if语句进行判断合法性,然后进行算法计算。
以下为本题类图
以上为选择输入。
这是新建的类GeometryObject,作为容器类,利用了数组列表。
⑦实验一
本题大致意思:
某班有30名学生,每个学生有学号、姓名和4门成绩(学生信息随机产生,存入一个对象数组),现新转来一名学生,请输入这位学生的学号、姓名和成绩(四门课的成绩小于100分,从键盘输入,以空格为区分),然后显示这名学生平均分、最高分,全班的最高平均分学生信息、新同学在班级中的成绩水平。
输入:新同学的学号、姓名、四门成绩
输出:输出这名学生平均分、最高分,全班的最高平均分学生信息、新同学在班级中的成绩水平。
思路:创建一个学生类(Student),先将30名学生的姓名创建并保存在字符串数组中,再使其对应每一个学号,然后随机产生分数,最后将输入的新的学生的成绩进行比较输出。
学生类(Student)
⑧实验二(1)
本题大致意思为:
一个农夫带着一匹狼、一只羊、一颗白菜要过河,河上只有一条船能够渡河,而且农夫每次最多只能带一个动物或物品过河。当农夫不在的时候狼会吃羊,羊会吃白菜。:由用户选择角色过河,系统自动判断游戏的胜负:当出现有生物被吃掉的时候,游戏失败,所有角色都到了河的另一边,游戏成功。
输入:输入1~5的数字
输出:输出农夫、狼、羊、白菜的现状(是否过河、是否被吃掉)
思路:在原有代码的基础上创建四个新的类:农夫类、狼类、羊类、白菜类,在类中进行输出其各自的状态。
⑨实验二(2)
本题大致意思为:与实验二(1)相似,但增加了船类(Boat),还需要输入狼和小羊的名字,并存储在各自的类中。
输入:先输入狼和羊的名字,再输入1~5的数字
输出:输出农夫、狼、羊、白菜的现状(是否过河、是否被吃掉)
思路:在原有代码的基础上创建六个新的类:农夫类、狼类、羊类、白菜类、船类、父类(fatherClass),其中父类是其他五个类的共同父类,在类中进行输出其各自的状态。
以上是父类的全部内容。
三、踩坑心得
①此次我学习使用了类,并使用了父类和子类、抽象类,但由于初次学习,还是有很多重复余需要改的地方,代码可读性较差,后期需要进一步学习。
②代码啰嗦,没有很好的规划,导致无法修改而全部重写,所以在后续的学习中需要对运算的思维进行把握,流程图成为了关键,思维导图是必需步骤。
四、改进意见
①采用输一个数据判断一个数据的模式,进行运作很麻烦。在前两次的作业中,并未用到数组,因此加大了工作量(采用的switch语句),因此可以用数组代替switch语句。
②代码混乱,三次作业,均为采用类(class),导致所有的代码均存放在Main中,导致后期修改麻烦,找不到模块。因此,可以将Main中的功能放到类中,提高代码可读性。
③由于对继承和多态的理解不够深入,导致出现很多小错误,希望以后可以减少甚至避免小错误的出现。
五、总结
①因为C语言的函数没有学好,导致Java的类的使用也出现了很多错误,比如实参和形参的运用,数据的传递等,在日后的学习需要对类再进行学习和探索。
②通过半个学期的练习,基本对Java有了一个进一步的认识,Java功能的多样性随之而来的是其难度的提高,因此,对Java的学习必将更加刻苦。