结对项目
2021/10/26 6:10:46
本文主要是介绍结对项目,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 软件工程 |
作业要求 | 作业要求 |
作业目标 | 生成四则运算题目 |
- 队伍
3119005434 韦秋风 韦秋风的GitHub
3119005408 陈泽同 陈泽同的GitHub
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Estimate | 估计这个任务完成需要多少时间 | 1800 | 2020 |
Development | 开发 | 360 | 600 |
Analysis | 需求分析(包括学习新技术) | 200 | 300 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审(和同事审核设计文档) | 20 | 20 |
Coding Standard | 代码规范(为目前的开发指定合适的规范) | 10 | 20 |
Design | 具体设计 | 180 | 150 |
Coding | 具体编码 | 600 | 500 |
Code Review | 代码复审 | 100 | 100 |
Test | 测试(自我测试,修改代码,提交修改) | 120 | 120 |
Reporting | 报告 | 60 | 60 |
Test Report | 测试报告 | 40 | 40 |
Size Measurement | 计算工作量 | 30 | 30 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 50 | 50 |
合计 | 1800 | 2020 |
效能分析
性能分析图
实时内存使用情况
设计实现过程
由InputExpression(number);函数实现随机生成number数量满足条件的算式,并放入ArrayList中
由AddExpressionToQuestion();函数实现将ArrayList中的算式放入队列Question中
由MyFileIO.writeQueue(exerciseFile, questions);函数实现将队列中的算式一一输出到运行目录下的exerciseFile(Exercises.txt)文件
由AddExpressionToAnswer();函数实现将这些算式的结果放入队列Answer中
由MyFileIO.writeQueue(answerFile, answers);函数实现将Answer中的结果输入到运行目录下的AnswerFile(answers.txt)文件
代码说明
// 元素加法,结果放入e1中 public static void Add(Element e1, Element e2) { if (e1.numerator == 0 && e2.numerator == 0)// 若分数部分均为0,只需对整数部分运算即可 e1.wholeNumber += e2.wholeNumber; else { e1.wholeNumber += e2.wholeNumber;// 带分数整数部分相加,放入e1的整数部分 int lcm = Lcm(e1.denominator, e2.denominator);// 求最小公倍数 e1.numerator *= lcm / e1.denominator;// 对e1的分子进行变换 e2.numerator *= lcm / e2.denominator;// 对e2的分子进行变换 e1.denominator = lcm;// 分母就是求得的最小公倍数 e1.numerator += e2.numerator;// e1和e2分子相加,存放在e1的分子处 // 将假分数化成带分数(也防止出现e1的值为十七又三分之三而不是十八的情况) e1.wholeNumber += e1.numerator / e1.denominator; e1.numerator = e1.numerator % e1.denominator; // 最终结果要约分 int factor = Gcd(e1.numerator, e1.denominator); e1.numerator /= factor; e1.denominator /= factor; } e1.operator = e2.operator;// 由于运算已经完成,将e2的运算符赋值给e1的运算符 e1.nextElement = e2.nextElement;// 修改结点关系 } // 元素减法,由于只有元素减法会产生负数,因此一旦有负数,return false public static boolean Sub(Element e1, Element e2) { if (e1.numerator == 0 && e2.numerator == 0) {// 若分数部分均为0,只需对整数部分运算即可 e1.wholeNumber -= e2.wholeNumber; if (e1.wholeNumber < 0) return false; } else { if (e1.wholeNumber < e2.wholeNumber) return false;// 如果整数部分就不够减,return false e1.numerator += e1.wholeNumber * e1.denominator;// 将带分数转化为假分数 e2.numerator += e2.wholeNumber * e2.denominator;// 将带分数转化为假分数 int lcm = Lcm(e1.denominator, e2.denominator);// 求最小公倍数 e1.numerator *= lcm / e1.denominator;// 对e1的分子进行变换 e2.numerator *= lcm / e2.denominator;// 对e2的分子进行变换 e1.denominator = lcm;// 分母就是求得的最小公倍数 e1.numerator -= e2.numerator; if (e1.numerator < 0) return false; // 将假分数化成带分数 e1.wholeNumber = e1.numerator / e1.denominator; e1.numerator = e1.numerator % e1.denominator; // 最终结果要约分 int factor = Gcd(e1.numerator, e1.denominator); e1.numerator /= factor; e1.denominator /= factor; } // e1和e2分子相减,存放在e1的分子处 e1.operator = e2.operator;// 由于运算已经完成,将e2的运算符赋值给e1的运算符 e1.nextElement = e2.nextElement;// 修改结点关系 return true; } // 元素乘法,结果放入e1中 public static boolean Multipy(Element e1, Element e2) { if (e1.denominator == 0 || e2.denominator == 0) return false; if (e1.numerator == 0 && e2.numerator == 0)// 若分数部分均为0,只需对整数部分运算即可 e1.wholeNumber *= e2.wholeNumber; else { e1.numerator = (e1.wholeNumber * e1.denominator + e1.numerator) * (e2.wholeNumber * e2.denominator + e2.numerator); e1.denominator = e1.denominator * e2.denominator; e1.wholeNumber = e1.numerator / e1.denominator;// 将假分数化成带分数 e1.numerator = e1.numerator % e1.denominator; // 最终结果要约分 int factor = Gcd(e1.numerator, e1.denominator); e1.numerator /= factor; e1.denominator /= factor; } e1.operator = e2.operator; e1.nextElement = e2.nextElement; return true; } // 元素除法 public static void Divide(Element e1, Element e2) { e1.numerator += e1.wholeNumber * e1.denominator;// 将带分数转化为假分数 e2.numerator += e2.wholeNumber * e2.denominator;// 将带分数转化为假分数 // 将除法运算转化为乘法运算 e1.wholeNumber = e2.wholeNumber = 0; int temp = e2.numerator; e2.numerator = e2.denominator; e2.denominator = temp; Multipy(e1, e2); } // 最大公因数算法 public static int Gcd(int a, int b) { if (b == 0) return a; return Gcd(b, a % b); } // 最小公倍数算法 public static int Lcm(int a, int b) { return a * b / Gcd(a, b); }
项目小结
韦秋风:
惊吓收获:本次项目暴露了我编程能力的不足,特别是以为自己懂java,实际上对java的语言特性也不了解。对于面向对象的程序语言仍然不够熟悉。
惊喜收获:虽然代码形式比较丑陋,但坚持下来最终完成了核心功能。
陈泽同:
总体来说这次的项目我个人认为没有发挥到最好。和同伴一起编程的时间太少,再加上两人对模块设计思路有差异并且沟通不及时,造成了许多时间的浪费;不过逐渐熟悉对方后,我们之间的沟通变得更加有效,两人协作的效率也越来越高,在最终关头实现了1+1>2的效果,一齐发挥智慧攻克了一个困扰已久的bug。这次结对编程让我体会到思维的多样性和创造性,我们应该学会主动适应同伴的思维,同时也发挥出自己独特的能力。
这篇关于结对项目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南