java 初学者 第二阶段作业编程总结及心得体会

0.前言

第二阶段java作业同样跟第一阶段作业一样分为3次。

第一次作业说实话我觉得是3次作业里面最难的,主要内容是跟正则表达式有关,还有类间关系的应用(关联、聚合、依赖、继承),字符串相关方法的调用等,都是需要我们自己去查资料看视频,所以说更难,里面有3个题目,一个是图形面积有关的,一个是用“蒙特卡罗方法”求圆周率,最难的就是第一题,水文数据校验和处理,说实话可能看懂题目都要费点劲。如下图

第二次作业只有2个题目,第一题是图形的继承和多态,主要是求输入不同图形的面积。第二题同样还是用到了正则表达式,是一个关于一元多项式求导的题目,这个题目的难点我觉得在于如何使用正则写出符合题目所给所有要求的正则表达式,同时在进行求导的时候,要知道如何用正则表达式和字符串相关方法将系数和指数进行分离,在分别进行处理,总体来说还是有点难。一元二次多项式的题目大致如下。

第三次作业我觉得是这3次里面稍微难度更低一点的作业,这次作业的目的主要是要掌握好类的继承,多态使用方法,还有就是接口是如何应用的。首先第一题是一个图形卡片排序游戏的题目 里面主要涉及到的比较难的就是运用接口去进行排序,还有就是用list动态数组的时候要记得泛型。第二题是第一题的进化,因为他在第一题的基础上,再次将图形进行了分类储存和输出,其实加几个不同的list动态数组就行了。第三题是第一次出现的加分题,是求素数的,但是并不是那么简单,因为10000000这个数值很大,可能会超出运行时间,所以要自己去不断进行优化,很遗憾,我没有做出这题。第一题的题目如图

1.作业过程总结

(1)总结三次作业之间的知识迭代关系

①第一次作业里面的三个题目之间没有什么很大的迭代关系,主要是对正则表达式的考察,还有就是对对我们时候能读懂题目的思维的训练,比如第一题第二题,这种比较抽象的题目,就需要我们能读懂题目,在以后的工作中也是,以后遇到的项目肯定不是简单的求面积,这就需要我们能看到了用户的需求,项目的要求,所以我觉得这其实是跟我们以后的工作相关。还有也考察了我们应该如何去按照类图去写代码,第三题是写的跟继承有关的,为后面的题目做了一下铺垫。

②第二次作业里面第一题就是涉及到了类的继承和多态,是对第一次作业第三题的补充和改进,是一个迭代的过程。同时里面还用到排序,我没用java里面特定的方法,还是用的冒泡排序来的,因为要求是要用这个,总体来说这个不难。第二题其实还是一个正则表达式的迭代,是求一元多项式求导的题目,首先要求要先匹配一个正确的一元多项式,才能进行下一步操作。本次作业内部也没有迭代关系

③第三次作业是非常纯粹的一个迭代过程,首先是对前两次作业跟图形有关的进行了总结,编写出了图形卡片排序的一个游戏,第三次作业里面的第2个题目又是对第一个题目进行了改进,这次是将不同的对象分开来,所以说第三次作业不仅跟前两次作业是一个迭代过程,他自己内部也是一个非常明显的迭代过程。

(2)如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性

①做了这么多次作业,我觉得吧,java的封装性就是不同的类不能随便改变其他类里面的变量,而且我们没吃如果在定义类的时候,里面有变量,我们都要加一个private,这样的话就只能通过调用成员的方法来改变或者使用某个变量,这样就达到了面向对象的封装性。

②通过这几个阶段的练习,知道了一些继承的基础用法,是通过关键字extends 来实现继承的,我所知道的是,类的继承是单一的,意思大概就是说一个类只能继承一个类,不过比较特别的,java里面的每一个类,当你创建出来的时候,就默认继承了Object这个类。不过继承关系可以不止一层继承,可以一直继承下去,同时子类会继承父类方法,不过要注意的是,构造方法是不能继承 的,要调用父类的方法一般是new 一个对象,要用(.)来调用方法。还有一个需要注意的是,private修饰的变量和方法是不能够被继承的。

③我觉得多态的实现肯定要满足几个条件,就是一定要有继承关系,同时方法一定要重写,方法重写也重载,需要注意的是,方法里面的属性类型如果数量完全一样的话,那么类型一定是不能一样的,如果数量不同的话,那就可以了。其实多态我觉得就是new对象,然后调用不同的重写的方法。

(3)作业过程中遇到的问题及解决方法

第一次作业

思路:大体看了一下题目,先把三题,在做第二题,最后一个第一题留到最后来,因为涉及到了正则表达式,要自己去学。

遇到的问题

①写第二题的时候,随机数的生成发现生成的不是自己想要的范围。

解决方法:看了一下讨论区,发现要用Math的生成随机数的方法才有用,然后就改过来了。

②最后还是答案错误。

解决方法:通单步调试发现自己少乘了一个数字,加上去就成功了。

③写第三题的时候用除法的时候出错,没有加上小数部分,导致出错。

④正则表达式的没能匹配出正确的年份的正则表达式,导致第一题没有得分。

第二次作业

遇到的问题

①第一题出现了圆属性非法和数量非法的错误。

解决方法:加上一个=号,然后加上数量非法的情况就OK了。

②第二题正则表达式只对写一半,还有好多情况没有搞得很清楚,可能是题目理解的不够透彻导致这题 只得了部分的分。

第三次作业

遇到的问题

①是非常简单的问题,单词拼写错误,搞得我弄了超级久。

解决方法:一个一个字母对照样例去观察。

其实第三次作业是出错最少的,因为老师上课的时候讲过这个类型的题目,也讲解了接口怎么使用,所以这次作业出的错比较少,也做的更轻松。

然后第三题没能设计出运算快的算法。

(4)每次作业花费的时间比例

第一次作业:花费时长大概一共是30个小时,第一题:22h;第二题:4h;第三题:4h;

第二次作业:花费时长大概一共是20个小时,第一题:4h;第二题:16h;

第三次作业:花费时长大概一共是5小时,第一题:2h;第二题:2h;第三题:1h;

(5)对编程过程的严谨性的认识及教训

①首先字母的拼写要注意,尤其是方法的命名,不然你发现方法不一致,代码很长的情况下,你会比较麻烦。

②正则表达式是必须要学会的,很多地方可能都要用到正则表达式。

③使用动态数组的时候,千万要记得使用泛型。

④类的多态性要注意方法的重载。

2.OO设计心得

①对面向对象三大技术特性之间关系的理解

我认为这三大特性是相互联系着的,任何一个都不能饿鬼脱离其中一个而完美存在,比如封闭性好了才能更好的展现去继承性,才能保证继承性的安全性,而多态又是建立在必须有继承性的基础之上,所以说,这3个技术特性谁也离不开谁。

②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

单一职责原则:我觉得单一其实就是一个类执行一个动能,尽可能不要类之间的耦合性太高,尽可能独立好,这样才不容易引起程序的一个地方崩溃,其他全部有关联的类也崩溃了。

“开闭”原则:开闭原则就是我们在写代码的时候,最好把类设计得好一点,一旦以后你能加其他功能,更容易加,其实就是可以开就是可以添加更多的功能,闭就是内部的不能随便更改。

③OO编程思维的理解

我觉得oo编程思维主要体现在类的设计,类之间的关系上,是聚合还是其他的什么,同时类之间的耦合度高低都是跟类的设计有关,我们就是要想办法把类设计得好,让单一职责原则和开闭原则体现出来,同时程序能很容易被读懂。

④类设计心得

我们在设计类的时候,要搞清楚类之间的关系,同时尽可能让类之间的关系不要那么复杂,耦合性低一点,一个类实现一个功能即可。

3.测试的理解与实践

1)测试对于编码质量的重要性

测试对于编码质量是非常重要的,就相当于测试游戏的bug一样,如果一个代码,你不去测试的话,那可能别人用你的代码都不放心,你的代码功能这样也是不完全的,很容易出现得到错误的结论的情况,所以测试是非常有必要的。

(2)查阅资料,假设使用Junit进行程序的测试是否可行

资料:JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

用来测试用例是可行的。

4.课程收获

这一阶段的学习,我进一步的知道了封装性,继承性,多态性,基本能够不错误的用到这3大技术特性,同时我学会了基本的正则表达式,对字符串的部分操作和方法有了进一步的理解。同时自己知道了set get方法有时候可以不写,写了反而会增加代码的长度。还有就是进一步明白算法的重要性,比如求素数的,一旦数字过大就发现运算时间太长了,这几次作业,我知道了动态数组怎么用,之前用的都是静态的数组,很不方便,现在知道了动态数组 ,方便了很多。

5.对课程的建议

①第三阶段作业难度、题量的建议

我希望第三阶段作业难度不要太大了,老师说难度加大一倍,我觉得要完蛋呀,现在感觉好难了哎,还有题量我觉得跟现在一样差不多就好了。

②课程内容讲解方面的建议

还是希望老师上课的时候能多见解一下跟作业有关的内容,这样做起作业来不会这么辛苦,哪怕讲一点点也好呀。

猜你喜欢

转载自www.cnblogs.com/c-s-s-forever/p/12817218.html