结对项目
| 这个作业属于哪个课程 | 22计科12班 |
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 实现一个自动生成小学四则运算的程序 |
姓名与学号
| 王展锐 | 3122004665 |https://github.com/r12-7/3122004665 |
| 达仁·江布尔 | 3122004420 |https://www.cnblogs.com/daren19 |
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
·Estimate | · 估计这个任务需要多少时间 | 30 | 15 |
Development | 开发 | 180 | 210 |
· Analysis | · 需求分析 (包括学习新技术) | 120 | 80 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 | 10 | 5 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
· Design | · 具体设计 | 20 | 30 |
· Coding | · 具体编码 | 60 | 30 |
· Code Review | · 代码复审 | 30 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | 60 | 50 |
· Test Repor | · 测试报告 | 20 | 20 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 20 |
· 合计 | 685 | 645 |
效能分析
效能分析
代码覆盖率
函数设计与实现
函数作用
函数名称 | 函数作用 |
---|---|
CreateFormula() | 随机生成四则运算式子,包含真分数 |
OptiExpression() | 根据后缀表达式将其转换为二叉树的形式,方便后面判断是否重复并且防止出现负数 |
AdjustmentTree() | 按规则优化二叉树,使其计算过程中不出现负数,并且中序遍历,生成查重使用的表达式,进行查重处理 |
TreeToExpression() | 将二叉树重新转换为后缀表达式 |
SwapChildTree() | 交换二叉树的左右孩子 |
calculate() | 根据后缀表达式计算出结果 |
transform() | 使用将中缀表达式转化为后缀表达式 |
关键函数
CreateFormula():生成 n 个包含随机操作符(+, -, *, ÷)、随机整数或分数的算术表达式。每个表达式可能包含括号来改变运算优先级,操作数的值在 1 到 m 之间。
OptiExpression():将算术表达式转化为二叉树,并对这棵树进行优化和表达式转换。
getCheckResult():计算题目的正确条数
calculate():计算
transform():表达式转换
测试
可能出现的异常以及解决方法
表达式解析错误:使用 expression.split("") 进行字符串拆分,这会将表达式逐字符拆分,例如 "12+34" 会变成 ["1", "2", "+", "3", "4"]
解决方法:使用正则表达式或 StringTokenizer 来正确解析操作数和操作符,避免将多位数字拆分开。例如,可以用 split("(?<=[-+/÷])|(?=[-+/÷])") 来正确分离操作符和操作数。
括号匹配不当:生成二叉树时,如果表达式中有括号,但括号不成对或顺序不对,可能会导致解析错误或生成错误的树结构。
解决方法:在解析表达式时,检查括号的匹配情况,确保左右括号数量一致,可以使用一个计数器来确保括号成对。
操作符处理缺陷:在操作符处理时,连续多个操作符或分隔符(如 "++", "--")会导致栈中的状态不一致。
解决方法:对于多个连续的操作符,加入判断,跳过多余操作符,或通过正则表达式处理特殊情况。
项目小结
1.结对编程需要考虑代码的可读性。团队协作当中,代码需要成员之间相互理解,制定一些标准,在必要的地方给出合适的注释是非常有必要的。
2.要合理分配工作,发挥团队效益。结对编程需要有合理的分工,发挥团队作用,提高彼此之间的沟通能力和团队协作能力,这些是个人编程所欠缺的。
3.兆康的资料搜索能力较强,但是python语言需要再系统学习一下。华健算法的设计思维较好,但是编码能力和成员沟通能力还需强化。