第一单元总结博客

第一次作业

有关设计

  1. 第一次作业相对简单,我只设计了两个类。Item类存放各种项的系数和指数;
  2. 识别各种概念我采用了自顶向下分析法,用一个ArrayList存放项;
  3. 在对输入的表达式进行解析以后,首先进行一次同类项合并,减少需要求导的项数,根据测试结果来看这样做的优化效果不错,只有负号开头的情况没有优化到。

度量分析

不知道为啥,第一次作业代码的复杂度和类图都无法显示,不过作业比较简单,又采用了自顶向下的分析,所有没有很复杂的方法。

有关bug

  • 自己的

    由于心大脑大,感谢同学给我报bug。少考虑了一种情况,比如说:- - x;
    这种情况下,两个符号分别判断为项前的符号,第一个因子为-1的省略形式。

  • 别人的

    发现bug的思路还是分析各种组合情况,主要在各种省略;
    除了被自己少考虑的上种情况外,没有发现其他的问题。

第二次作业

有关设计

  1. 第二次作业在第一次作业的基础上对 进行了复杂化,增加了 因子 的概念,项表示为因子的乘积,因子有常数因子、幂函数和三角函数;
  2. 识别各种概念依然采用了自顶向下分析法;
  3. 对于每一种概念建立一个类,Expression类, Item类, Factor类,还有一个专门用来错误处理的类;
  4. Expression类里维护一个存放项的列表, Item类里维护一个存放因子的列表, Factor类里存放因子的种类和它的指数;
  5. 时间有限,做了几个简单的优化:比如说将“+-”替换为“-”,将因子“1”和项“0”省略等,不值一提。

度量分析

  • UML类图

  • 复杂度分析
  1. 类的复杂度

  2. 方法的复杂度

Expression类中trigonometric()方法是将两种三角函数分开分析的,增加了复杂度,其实可以一同判断,这一点待改进;
digit()方法是因为有+1和-1省略的情况存在,当时没有进行预处理,这里的处理略有些复杂,其实可以先对表达式进行简化预处理,进而降低后续方法的复杂度。

有关bug

  • 自己的

    处理 --1 这种情况时写法欠考虑,导致 +-sin(x), --x 这种形式被判断为错误输入,非常遗憾,不过bug修复时忘记了点“下一步”更让我难过;
    还有因为输出不完善导致最后结果显示错误的问题。

  • 别人的

    从各种组合情况,尤其是各种省略来分析;
    有不少关于省略的bug,比如 - -2, - + -1这些,大多问题出在符号个数和正负叠加的合并判断上。

第三次作业

有思路未实施,是一次无效作业,不做赘述。

对比和心得体会

  • 从第一次作业到第三次作业,难度层层递进,有一点点想法。
  • 关于作业。可以做的预处理应当先做,可以非常有效的避免其后的代码过于复杂。像第一次作业先合并同类项还有优化的好处,第二三次作业可以利用正则表达式预判一些WRONG FORMAT的输入,而且可以除空格简化符号等等,让输入的表达式简单标准化,方便后续处理。
  • 要通读指导书,上面的建议尽可能的采纳,某些提示也应该注意,因为遇到过没过的点是数的范围不够的原因,而这个刚好在当时指导书上提到过,开始没当回事,后来老老实实改了的。
  • 还有要多思多想,写代码我觉得“瞻前顾后”挺好的,这是来自没有成功提交修复的血泪教训。
  • 还有遇到某个知识点的时候尽量看透彻看明白,就算这次不用,下次可能还需要被启发。
  • 必要的注释很有用,有助于检查代码,自己debug,写总结博客的时候尤其有裨益!

猜你喜欢

转载自www.cnblogs.com/mzny/p/12535734.html
今日推荐