302
社区成员
发帖
与我相关
我的任务
分享| 类名 | 属性个数 | 方法个数 | 类总代码规模 | 总控制分支数 | 核心职责 |
|---|---|---|---|---|---|
| Factor(接口) | 0 | 2 | 8 | 0 | 定义因子展开/求导标准接口 |
| Parser | 1 | 9 | 150 | 27 | 表达式语法解析核心逻辑 |
| Lexer | 3 | 4 | 50 | 13 | 词法分析,生成Token |
| Num | 1 | 5 | 20 | 0 | 数值因子的展开与求导 |
| Mul | 2 | 6 | 25 | 0 | 乘法因子的展开与求导 |
| Add | 3 | 6 | 30 | 2 | 加减因子的展开与求导 |
| Term | 4 | 9 | 55 | 6 | 多项式项的合并与运算 |
| Preprocess | 0 | 4 | 20 | 2 | 表达式字符串预处理 |
| ReFun | 3 | 4 | 50 | 6 | 递归函数展开逻辑 |
| Mainclass | 0 | 1 | 40 | 3 | 程序入口,流程调度 |
| Exp | 1 | 5 | 25 | 2 | 指数函数因子的展开与求导 |
| Poly | 1 | 8 | 120 | 18 | 多项式运算与格式化输出 |
| Var | 2 | 6 | 35 | 7 | 变量因子(x/y)的展开与求导 |
| Fun | 1 | 2 | 8 | 0 | 函数体静态属性管理 |
所有 Java 类均呈现高功能内聚,每个类严格遵循单一职责

第一次作业中,我借鉴了第一次上机时的程序结构,进行表达式的解析,并在poly类中用Arraylist存储各个term(形如a*x^b)。
第二次作业,我增加了exp类来实现exp需求的拓展,对于自定义函数,我新增了Fun类,在Parser解析表达式时进行字符串替换。对于选择表达式,我在ParseFactor方法中新增了解析选择表达式的分支,解析[(A==B)?C:D]中的ABCD,实现相等判断并返回C或D。
第三次作业,实现双变量的扩展和求导功能,新增ReFun类对递推函数进行处理,并在"f"token的解析中新增自定义函数和递推函数的分支,返回需要替换的表达式。
考虑到其他迭代,有可能会新增sin和cos函数,此时需要给每一个term新增两个Arraylist,分别存储sin和cos中的factor
1.作业中的bug
第二次作业:指数爆int,将var类中exp属性改为Biginteger即可解决,提前明确数据范围将会大大减少此类bug;进行多层嵌套乘方时还会TLE,是因为没有实现快速幂,需要增强优化性能的意识。
第三次作业:判断exp内是否需要加括号的逻辑有误;ParseFactor缺少对"+"token的解析:嵌套处理不当导致TLE;
2.测试策略
起初使用AI测试,效果不佳,后主要采用边界测试和嵌套测试,但是嵌套测试强度不足,没有检测出潜在的TLE问题
输出时优先输出正项;采用快速幂降低时间复杂度
| 作业 | 正确性 | 性能优化 |
|---|---|---|
| 第一次 | 10% | 0% |
| 第二次 | 20% | 20% |
| 第三次 | 40% | 50% |
大模型还用于讨论架构,debug,拆分过长方法
对于代码的拓展性有了更深刻的认识,先前代码的缺陷将为后续的迭代带来麻烦。此外还意识到了自己测试工作的不足,下一个单元中将注重代码的测试,学习测试策略方法。
希望课程组能提供代码测试相关的指导