四则运算阶段总结
20162325 结对编程项目-四则运算 阶段总结
一、需求分析
- 能随机生成n道题目,n由使用者输入
- 支持整数的四则运算
- 能够判断正误,错误时能提醒并输出正确答案
- 能计算出正确率
- 能多次生成题目,直到使用者选择退出
后续拓展的可能
- 支持真分数
- 题目去重
- 支持多运算符
- 设计一个类可以直接利用中缀表达式进行运算不需要转换
二、设计思路
- 设立一个栈和一个列表,栈存放运算符,列表存放操作数
- 用String类型定义两个10以内随机整数的加、减、乘、除四种方法
- 运用了栈的方法将中缀表达式转化为后缀表达式
- 设计一个测试结果的类判断正误
UML类图
三、实现过程中的关键代码
- 中缀表达式转化为后缀表达式
package Arithmetic;
import java.util.*;
/**
* Created by Administrator on 2017/5/13.
*/
public class NifixToSuffix {
private Stack<String> stack;
private List<String> list;
private String message,Message="";
public NifixToSuffix() {
stack = new Stack<String>();
list = new ArrayList<String>();
}
public void conversion(String expr) {
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if (token.equals("("))
stack.push(token);
else if (token.equals("+") || token.equals("-")) {
if(!stack.empty()) {
if (stack.peek().equals("(")){
stack.push(token);
}
else if (stack.peek().equals("*") || stack.peek().equals("/"))
list.add(stack.pop());
}
else stack.push(token);
}
else if (token.equals("*") || token.equals("/")) {
if(!stack.empty()){
if(stack.peek().equals("*")||stack.peek().equals("/")) {
list.add(stack.pop());
}
}
stack.push(token);
}
else if (token.equals(")")) {
while (true) {
String A = stack.pop();
if (!A.equals( "("))
list.add(A);
else break;
}
}
else list.add(token);
}
while (!stack.empty()) {
list.add(stack.pop());
}
ListIterator<String > li = list.listIterator();
while (li.hasNext()) {
Message += li.next() + " ";
li.remove();
}
message = Message;
}
public String getMessage() {
return message;
}
}
迭代代码如下
ListIterator<String > li = list.listIterator();
while (li.hasNext()) {
Message += li.next() + " ";
li.remove();
}
四、测试方法
-
NifixToSuffix
类的方法的测试
-
Judgement
类的方法测试-
evaluate()
方法
-
isOperator()
方法
-
五、运行过程截图
六、代码托管地址
七、遇到的困难及解决方法
- 问题1
本来应该打印出“请输入要生成的题目数”结果显示的却是一串乱码
- 解决方法
八、对结对的小伙伴的评价
-
结对搭档:20162311张之睿博客
-
评价
坦白一直以来学得挺吃力,很多东西都不知所以, 张之睿同学始终耐心讲解,我会继续跟从他的指导,多花时间,希望能逐步赶上大部队。
十、PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 20 | 30 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 90 | 120 |
· Design Spec | · 生成设计文档 | 120 | 140 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | 25 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
· Design | · 具体设计 | 120 | 150 |
· Coding | · 具体编码 | 300 | 400 |
· Code Review | · 代码复审 | 60 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 90 | 120 |
· Size Measurement | · 计算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 980 | 1215 |