20175325 第二周结对编程项目 四则运算
20175325 第二周结对编程项目 四则运算
一、需求分析:
- 实现一个命令行程序,要求:
- 自动生成小学四则运算题目(加、减、乘、除)
- 支持整数
- 支持多运算符(比如生成包含100个运算符的题目)
- 支持真分数
- 统计正确率
- 题目去重
- 能多次生成四则运算题目
- 能根据用户输入的数字生成四则运算的题目数量
- 多语言支持:
- 简体中文, 繁體中文, English
- 文件:
- 处理生成题目并输出到文件
- 完成题目后从文件读入并判题
- 用户能够选择是否开始答题
二、 设计思路:
- 产生随机数并且考虑符号的优先级。
- 能实现整数的四则运算
- 再实现分数的四则运算,分子和分母都取0-100范围以内的整数;
- 根据输入的两个参数决定表达式的数量及四则运算的范围,随机生成其范围内的自然数及运算符。
- 能随机插入左括号并在相应的位置插入右括号。
- 根据四则运算规律进行四则运算,能判断结果是否正确,并输出正确率。
三、UML类图:
四、结果测试:
-
运行结果:
-
文件截图:
五、码云链接:
https://gitee.com/sgm5/text1/commit/41bc7337f3f7066853056a8499178379889c11e9
六、实现过程中的关键代码解释:
- 下列是如处理分数计算过程
public void Fraction(String FenShu) {
String[] File = null;
if (FenShu.contains("+")) {
File = FenShu.split("\\+");
Calculate(File, 0);
} else if (FenShu.contains("-")) {
File = FenShu.split("-");
Calculate(File, 1);
} else if (FenShu.contains("x")) {
File = FenShu.split("\\x");
Calculate(File, 2);
} else if (FenShu.contains("÷")) {
File = FenShu.split("÷");
Calculate(File, 3);
}
}
- 插入括号的方法
- 法则
1.如果遇到数字,我们就直接将其输出。
2.如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
3.如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
4.如果遇到运算符号且栈非空,查看栈顶元素, 如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
5.如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
if (first == '(') {
return true;
}
switch (symbol) {
case '(':
return true;
case 'x': {
if (first == '+' || first == '-')
return true;
else
return false;
}
case '÷': {
if (first == '+' || first == '-')
return true;
else
return false;
}
case '+':
return false;
case '-':
return false;
case ')':
return false;
case '=':
return false;
default:
break;
}
七、总结与对队友的评价:
本周我们主要对上周代码进行了修改和完善,在程序里加入了分数的算法。我们两个人是室友,结对比较方便,讨论的时间也更加地充足,对于队友的想法也能及时地了解并沟通,当我们两个有分歧的时候、在两人都不明白的代码或者知识时,都能够各自去查找并且将所得到的解答相互沟通,从而达到了事半功倍的效果,对于“领航员”和“驾驶员”的角色,我们总是轮流着来,相互学习,相互吸收优点。通过这次结对作业,加深了我对JAVA的知识印象,也弥补了之前学习中的一些不足
八、PSP:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 100 |
·Estimate | · 估计这个任务需要多少时间 | 400 | 550 |
Development | 开发 | 150 | 250 |
·Analysis | ·需求分析 (包括学习新技术) | 30 | 45 |
·Design Spec | · 生成设计文档 | 30 | 50 |
·Design Review | ·设计复审 (和同事审核设计文档) | 30 | 50 |
·Coding Standard | ·代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
· Design | · 具体设计 | 60 | 100 |
· Coding | · 具体编码 | 150 | 200 |
·Code Review | ·代码复审 | 20 | 45 |
·Test | ·测试(自我测试,修改代码,提交修改) | 120 | 200 |
Reporting | 报告 | 60 | 80 |
·Test Report | · 测试报告 | 15 | 25 |
·Size Measurement | ·计算工作量 | 10 | 20 |
·Postmortem &Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 25 | 40 |
合计 | 1180 | 1785 |