第二次课设报告
Posted 3065-905323
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二次课设报告相关的知识,希望对你有一定的参考价值。
第二次课设报告
前言
这一段时间,我们主要学习了java数据校验中的正则表达式和抽象类接口类的使用方法,并且巩固了之前学习中类的创建和使用,一下就是我在这段时间的收获和总结。
1.本阶段实验过程总结
本阶段的实验较上阶段难度明显提升,还新增了正则表达式和链表这些自学部分,很好的考验了我们的理解和自学能力。
第一次实验的第一题是关于水位数据的计算和处理,但难度最大的部分还是数据处理中收集数据的校验,这里需要用到正则表达式,尤其是时间数据的处理,题目特别要求不能使用判断语句,只能运用正则的知识来解决,这里就需要观察闰年年份的数学规律,然后将所有的可能涵盖在一个正则表达式之中,虽然我已经知道了做题的思路,但这部分的问题我因为无法总结出闰平年的数学规律而没有去实现。第二三两题则引入了抽象类,关于子父类之间的关系比较的好理解,所有很轻松的就解决了,虽然我后面做的很快,但第一题遇到的问题我始终没有得到解决。
在本次实验,我遇到了在java学习上的第一次挫折,这让我清晰的认识到自己自学能力上的不足,并且我想我应该能够克服这个困难。
第二次实验的第二题难度较大是关于对给定方程的求导,其中又属分割各方程成员难度最大,于是我观察发现方程成员较为简单,都相当于系数*变量^幂的格式,开始我想用+号将方程各成员分割开,但很快发现当各成员间是-号的话,这个方法就行不通了,所以,我想到了之前让我头疼的正则表达式,并且找到了group()find()这两个方法,find用来遍历,group用来分割,提交作业过后,很快我又发现了问题,题目的输入存在变量不为x,方程存在空格和拥有常量等问题,然后我先用replace(,)的方法除去了方程中的空格,然后改变group()中的正则表达式用粗分细校的方法解决了另外的两个问题,"([-]?[0-9]+[^(\w&+)]{1}[^\W&\d]{1}[^(\w&+)]{1}[-]?[0-9]+)|([-]?[0-9]+[^(\w&+)]{1}[^\W&\d]{1})|([-]?[0-9]+)"这个是最后的成品。然后是第一题需要运用到抽象类和链表,但java的链表和C语言的很不相同,用起来感觉像是可以随意增减空间的数组,我一开始觉得java应该有现成的解决排序的方法,然后我在网上搜到了Collections.sort()的方法,但因为还没有学接口类,所以最后用冒泡排序的算法解决了这个链表排序的问题。
在本次实验,感觉运气较好,很快的想到了解题思路,又很快的解决,感觉走出了第一次实验的阴影,找回了自信。
第三次实验很幸运我之前搜到过用Collections.sort()排序的方法,所以第一二题很快就想到了思路,总体来说感觉难度不是很大,就是第二题我创建了五个链表,感觉过程有点繁琐,然后就是第三次作业的附加题,测试点是求10000000以内的素数个数,我用了三种方法第一种是用了常规的遍历的方法,但用于判断是否为素数的方法仅遍历到该数的方根,用这个方法来解决这个问题结果却运行超时了,大概用了两万毫秒。然后,我对这个方法进行了改进,我只遍历奇数,时间缩短了四倍,用了大概五千毫秒,然后过了实验点。然后是第三种方法,我在网上找了一个求一百以内的素数方法,我对它进行了改良,该方法是先建立一个n个空间的数组全部赋值为1,然后对第1个空间的值清空为0(因为1不是素数),然后从3开始对该空间之前的值不为0的数组空间的位置遍历进行除法,且仅进行遍历到该数的方根,若都不能整除值不变还为1,否则为0,然后对下一个空间进行相同的判断,从运算次数来说,它仅遍历小于该数的方根的素数,运算次数明显减少,但却需要创建数量为n的数组,而题目数据过大,我的电脑内存就爆了,后面我还对数组数量进行缩减,一样仅运算奇数,还是一样爆内存,我还换用了链表,但结果都一样闹了乌龙,最终我还是选择了第二种方法。
在本次实验,主要的经历还是在第三题的优化算法上,第三种方法让我感觉到实验前分析的重要性,我不应该仅考虑运算次数,还应该考虑到内存空间,或许在数据量比较小时第三种算法更有优势,但这次实验的数据量很大,或许我如果实验前进行仔细的分析,就不会闹这场乌龙了。
2.本阶段设计心得
(1)数据的校验不是就一定需要使用if的判断语句,正则表达式更为简洁更具优势。
(2)正则表达式还可用于切分一些较无规律的字符串,比单纯的split()更实用。
(3)实体类最好都继承与抽象类,这样在创建链表时是会更方便,也跟方便实现程序的多态。
(4)接口的作用和C语言的方法有相似之处,有和java中的抽象类性质相同。
3.本阶段课程收获
(1)自主学习了正则表达式的部分内容,锻炼了我们的自学和理解能力。
(2)巩固了前阶段学习的类与类图的知识。
(3)学会了链表的使用
(4)理解了抽象类和接口类
(5)了解了java的一些原则
4.对课设建议:无
以上是关于第二次课设报告的主要内容,如果未能解决你的问题,请参考以下文章