网络四则运算结对编程

一、结对信息

项目组合 郭炜埕 201521123064 郑晓丽 201521123066
项目地址 (https://gitee.com/vicheng/four_operations/tree/master)

二、结对编程

1、需求分析

原来的代码只实现简单的两位数之间的加减乘除,而我们为需要改进其功能,实现了三位数的计算,并加了括号


改进后界面:

改进前类图:

改进后类图:

2、程序设计

3、代码展示

关键代码展示:
···
double g(double a, double b, String m) {

	double v = 0;
	switch (m) {
	case "+":
		v = a + b;
		break;
	case "-":
		v = a - b;
		break;
	case "×":
		v = a * b;
		break;
	case "÷":
		v = a / b;
		break;
	}
	return v;

}


private  List<Object> trans(String s) {
	Stack<Character> op = new Stack<Character>();

	ArrayList<Object> list = new ArrayList<Object>();
	Pattern P = Pattern.compile("[0-9]+(\.[0-9]+)?"); // 正则表达式来处理带小数点的数字
	int i = 0;

	while (i < s.length()) {
		char c = s.charAt(i);
		if (c >= '0' && c <= '9') {
			String s1 = s.substring(i);
			Matcher m = P.matcher(s1);
			if (m.find()) { // 取匹配到的第一个数字
				s1 = m.group();

				list.add(s1);
			}
			i = i + s1.length();
			continue;
		} else if (c == '(') {
			op.push(c);
		} else if (c == ')') {
			char p = op.pop();
			while (p != '(') {
				list.add(p);
				p = op.pop();
			}
		} else if (c == '+' || c == '-') {
			while (!op.isEmpty()
					&& (op.peek() == '+' || op.peek() == '-' || op.peek() == '×' || op.peek() == '÷')) {

				list.add(op.pop());
			}
			op.push(c);
		} else if (c == '×' || c == '÷') {
			while (!op.isEmpty() && (op.peek() == '×' || op.peek() == '÷')) {
				list.add(op.pop());
			}
			op.push(c);
		}
		i++;
	}

	while (!op.isEmpty()) {
		list.add(op.pop());
	}
	return list;
}

}


##4、程序运行
输入习题数,有选择语言的功能
简体中文
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325133213321-242584653.png)d
繁体中文
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325133456180-939777441.png)
英文
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325134804968-852022730.png)

开始
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325133550585-585393349.png)
进入运算界面,开始计时
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325134531868-1362324261.png)

输入答案
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325134607765-1839027844.png)

##5、测试
(1)、对原先的代码进行的代码覆盖率的测试
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325152800510-319708184.png)

 (2)、对改进后的代码进行单元测试(主要测试算法)
测试代码:
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325153101444-431916334.png)
测试结果:
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325153211391-1913689059.png)
(3)、对改进后的代码进行覆盖率测试
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325155608412-2087370827.png)
解读:类似与于Arithmetic里面switch语句部分执行,选择性语句
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325163730755-720453098.png)
或者检测异常,如果没有异常,里面的语句便不会执行
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325163936819-80896710.png)
诸如此类的会降低覆盖率

##6、PSP表格
PSP2.1  | 个人开发流程 | 预估耗费时间(分钟)| 实际耗费时间(分钟)
- | :-: | -: 
Planning 	| 计划 | 18	 | 16
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 10 | 8
· Analysis	| 需求分析 (包括学习新技术) | 6 | 10
· Design Review | 设计复审 | 4	| 6
· Coding Standard | 代码规范 | 5 | 5
· Design | 具体设计 | 20 | 30
· Coding | 具体编码	| 36 | 21
· Code Review	 | 代码复审 | 7 | 9
· Test | 测试(自我测试,修改代码,提交修改)| 22 | 33
· | 并提出过程改进计划 | 10 | 10
##7、码云提交记录
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325170057848-1457953136.png)

##8、小结感受
我们的功能还待完善,在输入答案栏需要输入一位小数,如果答案是无限不循环小数,还没法实现保留几位小数的功能。两个人结对编程相当于合作,
要互相了解,并完成自己的任务。在团队中认识到自己的不足,也能看到队友身上的优点。继续努力学习

附上图片
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325175552142-1279854880.png)
原文地址:https://www.cnblogs.com/zxl3066/p/8643902.html