Java教程

java第二次实验报告

本文主要是介绍java第二次实验报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.  前言

首先说明一下作业的情况,第四次作业得分情况是52分,第五次作业的得分情况是77分,第六次作业的得分情况是100分。第四次作业水文数据校验及处理,日期问题面向对象设计(聚合一),图形继承 水文数据校验及处理学习并运用正则表达式,日期问题面向对象设计(聚合一)对类有了更加深刻的认识, 图形继承学习了继承方法实现子类继承父类。这次作业中,主要是水文数据校验及处理只拿了两分,导致整体分数有点低,剩下的两个题中,难度不是特别大。第五次作业相对于第四次作业就简单了些许,第一题找出最长的单词-hebust主要是训练正则表达式,第二题 合并两个有序数组为新的有序数组以前练习过,难度不是很大,第三题 合并两个有序数组为新的有序数组中,学习到了一种新的排序法方法,叫做插入排序,第四题统计Java程序中关键词的出现次数没过,这个是我以为自己写完了然后在idea中忘提交了,第五题日期问题面向对象设计(聚合二),和第四次作业中的差不多,只是测试数据改了,还有输出格式。第六次作业难度就又简单了许多,总的来说就是训练正则表达式,7-1 正则表达式训练-QQ号校验,7-2 字符串训练-字符排序 ,7-3 正则表达式训练-验证码校验,7-4 正则表达式训练-学号校验,7-5 图形继承与多态,7-6 实现图形接口及多态性。这六个题难度不是很大,整体完成情况还是很不错。

2.设计与分析

①总结三次作业之间的知识迭代关系:

 

第四次作业主要是对Java中的字符串的应用,和对应用正则表达式对输入字符串数据进行合法性校验的考察,日期中类的运用,还有图形类的继承的应用。这是我们第二次接触正则表达式的相关知识,并且应用在一个对于我们是初次处理数据来说是有难度的题目上。第五次作业是在第四次作业的图形类的继承上加了多态的使用,还有使用类的继承、多态性实现,以及正则表达式的运用,进一步加深了我们对正则表达式的应用。第六次作业是在前两次作业的基础上,即类的继承、多态性使用时加上接口的应用,加深了我们对接口的理解。

 

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

 

每次作业的一些类里的属性的使用都是有限制的,而在其他类里使用就需要通过一些特殊的方法才能使用,这属于对自身类的一种保护。这就是属于封装性。作业中图形的继承,Shape类是父类,而这些Circle类,Rectangle类,Ball类,Box类都是它的子类,它们都继承了Shape类一些东西,比如周长,面积等。而多态性则表现在一个行为表现出来的方式是不一样的,比如同样是求面积,但每个物体的求面积的公式是不一样的,所以所需要的方法是不一样的。

 

③作业过程中遇到的问题及解决方法

 

第四次作业,主要是水文数据校验及处理的题目,对于输入的数据的检验要求比较多,以至于很多测试点都过不了,最后只能一个个来更仔细地修改。

 

并且空格的处理也是很麻烦的:由于人工输入数据可能存在疏忽,在每一个输入数据两端均可能存在多余的空格,程序应该能够自动过滤这些空格(不报错)。

  1. 对于非空数据,我们再对其进行整体判断是否能被|恰好分割为5部分,通过使用自定义的boolean函数来判断是否数据合法,根据题目要求,每一条这样的数据我们需要输出"Wrong Format"及该条数据。

2.对字符串各部分进行合法判断,对于分割后产生的5部分字符串,由于题目要求不仅要判断合法性,还需要我们指出错误行数,和列数,我们需要对其进行分开检验。大体思路为先使用正则表达式对其进行合法检验,只要检测到该数据不合法便可以直接输出,所在行数我们可以使用一个计数器变量来记录这是第几条数据,将其作为参数传入自定义的检验函数中,所在列数我们可以根据该字符串再切割后的字符串数组的索引+1得到。

 

在日期问题面向对象设计(聚合一)中,此题是传统的类使用方式,通过定义不同的类,并在其内进行对象的嵌套,实现了多个相关类之间的相互调用。其主要结构为将Year类作为最底层的对象,依次嵌套在月,日类中,实现的日期的聚合,如图这样做的缺点非常明显

  各类之间的嵌套非常复杂,使得代码在出错时,难以快速定位到bug处,即使使用软件自带的debug方法也难以快速定位到错误。对于相同的日期构造,此题要求采用与聚合一之间明显的不同在于,Day,Month,Year类之间各自独立,并没有嵌套,因此当数据出错时,可以迅速定位到错误所在的类,

因此在构造相类似的类结构时,建议采用如上图所示的结构,这样将使代码更为简洁,结构更加清晰。

 ④每次作业花费的时间比例

 第一次作业花了五天左右,尤其是第一题水文数据的校验问题花的时间最多,多次在格式问题上出错,然后就是日期问题面向对象设计(聚合一),也花费了较多时间。第二次作业花了七小时左右,主要学习了插入排序,还有52个Java关键字,还有日期类处理聚合二的测试电话花费的时间比较久一点。第三次作业三个小时,难度较小,思路都是比较清晰,主要花费在接口和多态类的学习。

 ⑤对编程过程的严谨性的认识及教训

 第一次作业的水文数据校验和第二次作业的多项式的检验都是对输入的数据的正确性判断,而有时少一个字符或是多一个空格都是不能让程序正常运行的,因此对数据的处理就显得很重要了。

 

3.设计心得

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

 1. 封装——对类里面的成员变量通过使用private修饰符进行隐藏,通过使用public 修饰符来编写它们对应的方法来进行访问和修改。将不同的职责抽离出来封装到不同的类中.可以实现对代码的解耦;封装是通过将对象的某些属性和和操作隐藏起来,内部信息是对外隐藏的,在其他的地方就不能随便使用了,是对成员的一种保护。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

 2. 继承——如果子类继承于父类,子类继承父类非private的属性和功能,子类具有自己的属性和功能,即父类没有的属性和功能;第三,子类还可以以自己的方式修改父类的功能;继承的子类拥有父类非 private 的属性、方法,子类可以拥有自己的属性和方法,即子类可以对父类进行扩展,子类可以用自己的方式实现父类的方法。Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类。

 3.多态——多态表示不同的对象可以执行相同的方法,但是不同的对象对于方法的实现不同,操作就可以不同,多态是一种事物的不同表现形式,具有多样性。就像是走路,每个人走路的形态都是不相同的。

③OO编程思维的理解

面向对象中,对问题细致划分,通过一个个小功能的实现,而实现整个大的功能,而不是去专注于整个过程应该怎么解决。因而复用性很强。

④类设计心得

一个类的设计,应该是一个相对比较大的功能的实现,在这个类里有着实现该功能所必要的条件实现起来相对完整。

 

4.课程收获

 

总结这四周来在OO方面的教训及收获

 

 在写了很多次关于图形的作业后很快吸收了继承和多态的意义,从这个角度出发,让我领会了面向对象的意义。同时我也学会了正则表达式的使用,这让我知道了知识的萃取不能光依赖老师的讲解,我们需要及时在网络上查阅相关资料来获得知识。总之我的代码水平在这三次作业中得到了很大的提高,解决问题的独立性也因此增强。

通过这两个月的训练,,对面向对象三大技术特性封装,继承与多态三者之间关系有了更深的理解,对它们的运用也更熟练了。了解了并慢慢开始使用“开-闭”原则,进一步训练了单一职责原则,对面向对象理解更深。在求税率的问题上,第一次是运行超时的,这也让我看到了代码的优化也是很重要的。

①总结三次作业之间的迭代关系

         第四次到第六次作业,难度逐渐下降。

      第四次作业:主要考察的是Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算,主要是正则表达式的使用,数据的多层次处理等,再额外考察了简单的图形继承;

      第五次作业:主要考察的是类的继承、多态性及其使用方法,主要是图片的继承和多项式的求导,进一步熟悉类的使用意义,从而体现出面向对象的特质;

      第六次作业:主要考察的是面类的继承、多态性使用方法以及接口的应用,通过对第二次作业的逐步迭代,逐步抽象,用面向对象的思想逐步重构第二次作业。

 

  ②如何通过作业逐步从面向过程过渡到面向对象

         在第三和第五次作业中,从面向过程的日期判断迭代到第四次,第五次作业面向对象的日期计,面向过程在思考和编写代码时较为简单,但具有很大的耦合性,代码中各部分关联较大,且只能顺序完成单一功能,一旦出现需求更改,几乎难以修改代码。而面向对象将各部分抽离出来成为类,使其解耦,通过对象之间的操作完成所需功能,复用性好,扩展性强。

 

5.总结

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

       难度不要偏重于单一的部分,不要像第四次作业的第一题水文校验一样,大部分时间都用在了对数据格式的验证上,实际上实现功能并不难,但是大部分时间花在了编写正则表达式上。题量两三题即可,代码的完整性还是很重要的。

 

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

 

做题的话,只靠课上老师讲的内容是不够的,很多内容都是需要自己去找资料的,希望课上的内容有更多的实例让我们去理解。

这篇关于java第二次实验报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!