其他分享
首页 > 其他分享> > OO第一单元总结

OO第一单元总结

作者:互联网

一、作业分析

第一次作业

思路

  1. 采用训练所提供的框架,并且具体实现依照强生同学在讨论区发的帖子。先是采用lexer对我们的输入表达式进行读取,把他们都读取成为一个一个“因子”,包括各种运算因子和计算符号还有小括号之类的。
  2. 然后我们用parse类来对已经读取出来的一个一个“因子”来解析。具体解析方式是递归下降法,入口是parseExpr,然后对于每个Expr在进行parseTerm,解析出来的Term在用parseFactor方法解析成为一个个Factor。
  3. 针对不同的Factor我们定义了不同的“因子”类,这样再进行了parse之后我们可以视作解析出来了一棵表达式的树。
  4. 解析出来之后我们就可以进行展开输出了,我是先去将所有的因子转换成为coe*x**index的同一形式,然后再把表达式因子通过Arraylist<>这个容器包装成一整个表达式。
  5. 转换成功之后的输出我采用库函数自带的System.out.println(),所以是需要去重写我们的toString函数,重写之后就能够是的表达式按照我们所需要的的形式进行输出了。

UML类图

Statistics

Metrics

通过一些统计工具的统计,可以发现自己的有些地方的代码复杂度是有待提高的,就比如这次作业中的ForTerm.toString()方法,ev(G)过高了,说明这个方法中toString()实现的不是很好,流程复杂了,所以就很容易在这种地方出现bug,不出意外,这次作业我的bug救助要出现在这个地方。

Bugs

这次作业十分遗憾因为自己卡最后的时间提交,结果因为自己没有用官方包进行读入而导致中测都没有过,很可惜。

除了这个,自己在做的时候也找到了不少的bug。其中印象最深的还是空指针,自己刚发现空指针的时候很懵逼,先是自己上网查了下,然后又向强生同学求助,才发现是我自己在Term的构造方法那里出问题了,在有参数的构造中没有去声明新的空间,导致出现了空指针的情况。

还有比较大的bug就是自己在表达式toString()的上面,自己在如何处理指数和系数的优先级上出现了些问题,导致会有些奇奇怪怪的输出。

第二次作业

思路

第二次作业在第一次作业的基础上有较大的跨越,开始我是想在自己第一次作业的基础上“缝缝补补”过去的,打算采用先去预处理整个函数式,将我们的自定义函数和求和函数处理掉再去用第一次作业的处理方式,这个时候只需要我们升级下第一次作业的配置使得她能够处理三角函数之后按道理就能够勉强过去了,开始的话我是先做了添加三角函数类,再把我们的基本的“通项”加上我们的用于处理三角函数的HashMap。然后就要解决怎样去处理掉自定义函数和求和函数,之前想的是去暴力进行字符串替换,但是自己进去写的时候才意识到要考虑的情况太多了,自己写了挺长一段时间之后还是没有很好的解决,最后决定换成预解析写完这次作业,预解析的话思路就会简单很多了,就是先解析我们每一行固定的格式,然后每输入一行解析计算一行,又由于之前我已经解决了对于三角函数的问题,所以就很好完成了这次的作业。

UML类图

Stastics

Metrics

这里还是照样自己的toString方法十分的复杂,自己还是没有找到一个很好的方式去很简洁的实现字符串输出,全程都是使用十分简单粗暴的条件判断做的。

还有就是我的解析方法,这个我自己觉得有些无法避免,毕竟这个方法承担着最复杂的表达式解析任务。

Bugs

有一个bug是当我的三角函数的处理,当我的三角函数里面是一个“0”值时候,在term这个类的toString方法会把他视作“”(空的),由于我把空字符默认成“1*x**0”所以是会输出“1”,这个bug一直到最后也是没有发现。在第三次作业才发现的。

在做的时候也出现了不少的bug,其中有因为构造的习惯问题导致的“空指针”,也有因为没有理解“深克隆”和“浅克隆”的区别,出现了一些不能解释的输出。

第三次作业

思路

思路和第二次作业是十分相似的,预解析模式第三次作业在第二次的基础上知识需要去解决如何实现三角函数里面的表达式因子嵌套问题,我的处理就是去掉上面那个tri类,而是用已经存在的Formula类来代替它的位置,在去处理好细节就好了。

UML类图

Statistics

Metrics

这个复杂度和统计和第二次作业大同小异,此处就不再赘述了。

Bugs

大部分的问题在上次作业已经解决了,这次的克隆也全都改成深克隆了,并且这次也基本没做优化,所以最后基本上没有什么新的bug,但是性能分是完全没了。

大家一些典型的bugs

二、心得体会

标签:OO,总结,三角函数,作业,因子,表达式,解析,bug,单元
来源: https://www.cnblogs.com/qiaoaiku44/p/16059093.html