BUAA_OO 第一单元表达式求导作业总结
一、三次作业总结 三次作业难度逐层递进,逐步帮助我们入门理解面向对象思想。第三次作业可以算是系列的巅峰版,因此本文重点介绍第三次作业的设计思路,当然前两次作业也进行了较细致的介绍。另外三次使用的查找bug方法较为相似,统一放在最后介绍。 1、 第一次作业 1.1 需求分析 本次作业需要完成的任务为简单多项式导函数的求解。 运算法则包含加法和乘法,因子也只包含常数项和变量项,较好处理。 1.2 实现方案 1.2.1 宏观架构 这次作业我设计了两个类,分别是最基础的Poly类,储存表达式按[+-]区分的每一项,另一个是包含Poly类构成的arraylist的表达式类。设计说明见下图 1.2.2处理细节 本次表达式相对简单,但是因为输入字符串过长(200字符),用基于回溯的正则容易出现爆栈的问题,因此本次我进行了修改,去除了一开始使用大正则的思路,采用了循环处理的方法。即每次提取最靠前的项看是否匹配,然后删除最开始匹配到的部分,继续匹配。 另外,为了追求方便,我在开头进行统一特判,确定空格没有导致格式问题后去除空格,以便简化后续的处理。因为思虑补全这最后也导致我在互测的时候付出了惨重的代价,这个后续再说。 最后的优化中我采取了最基本的合并同类项思路,遗憾的是我没有考虑到将正项提前这件事,最后强测分没有满。 1.3 本次作业暴露的问题 1.3.1 测试问题 本次作业强测全对