20162307 结对编程-四则运算(挑战出题)

20161207 结对编程-四则运算(挑战出题)

结对伙伴:石亚鑫 20162303

需求分析

1.此次作业请在http://git.oschina.net/上新建一个仓库提交代码,并且在博客中给出仓库连接(代码托管)
为了和之前的代码有所区分,所以在班级码云下创建了新的结对项目,下面已经给出了此次的代码托管链接
2.自己输入题目数,生成的运算符数量,输出的文件名

System.err.println ("java ExpressionGenerator ");
System.exit(1);

3.操作数为个位整数,即选择范围只能是:1,2,3,4,5,6,7,8,9这9个数字

lnode = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
rnode = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);

4.操作符选择范围只能是:+,-,*,/, 还有括号

设计思路(同时输出UML类图)

实现过程中的关键代码解释

import java.util.Random;
import java.io.IOException;
import java.io.FileWriter;

public class ExpressionGenerator {
public static void main(String[] args) throws IOException {

int num_topic;//题目个数
int optr_num;//运算符个数
if (args.length != 3) {
System.err.println("java ExpressionGenerator ");
System.exit(1);
}
num_topic = Integer.parseInt ( args[0] );
optr_num = Integer.parseInt(args[1]);
String file_path = args[2];

Random rnd = new Random();
FileWriter fw = new FileWriter(file_path);
BinaryTree bTree;
for(int i = 0; i < num_topic ; i++){
bTree = new BinaryTree(optr_num );
bTree.createBTree();
System.out.println(bTree.toString() );
fw.write(bTree.toString() +'\n');
}
fw.close();
}
}

生成题目部分代码:

for(int i = 0; i < place.length; i++){
if(place[i]){
lnode = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
rnode = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
if(i%2 == 0){
lchild = new TreeNode(String.valueOf(Ran.getOperator()), lnode, rnode);
opeList.add(lchild);
opeList.get(num1).setLchild(lchild);
}
else{
rchild = new TreeNode(String.valueOf(Ran.getOperator()), lnode, rnode);
opeList.add(rchild);
opeList.get(num1).setRchild(rchild);
}
}
else{
if(i%2 == 0){
lchild = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
opeList.get(num1).setLchild(lchild);
}
else{

rchild = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
opeList.get(num1).setRchild(rchild);
}
}
num1 = num1 + i%2;
}

测试方法

用老师给的测试工具

运行过程截图

代码托管地址

遇到的困难及解决方法

1.因为我的电脑的系统是苹果系统,无法支持老师所给的测试工具,所以本次测试是由我的小伙伴完成的
在完成过程中,我遇到了如图所示的困难,并与老师进行沟通交流

将随机数改为1~9,并将“=”去掉,方可完成测试

2.除数为0:
改掉代码,将随机数改为1~9

if(num == 1){
lchild = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
rchild = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
root = new TreeNode(String.valueOf(Ran.getOperator()), lchild, rchild);
}
else{
int num1 = 0;
int n = getDeep() - 3;
boolean[] place = Ran.getChildPlace(num);
root = new TreeNode(String.valueOf(Ran.getOperator()), null, null);
opeList.add(root);

for(int i = 0; i < n; i++){
for(int j = 0; j < (int)Math.pow(2, i); j++, num1++){
lchild = new TreeNode(String.valueOf(Ran.getOperator()), null, null);
rchild = new TreeNode(String.valueOf(Ran.getOperator()), null, null);
opeList.get(j + num1).setChild(lchild, rchild);
opeList.add(lchild);
opeList.add(rchild);
}
}

for(int i = 0; i < place.length; i++){
if(place[i]){
lnode = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
rnode = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
if(i%2 == 0){
lchild = new TreeNode(String.valueOf(Ran.getOperator()), lnode, rnode);
opeList.add(lchild);
opeList.get(num1).setLchild(lchild);
}
else{
rchild = new TreeNode(String.valueOf(Ran.getOperator()), lnode, rnode);
opeList.add(rchild);
opeList.get(num1).setRchild(rchild);
}
}
else{
if(i%2 == 0){
lchild = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
opeList.get(num1).setLchild(lchild);
}
else{

rchild = new TreeNode(String.valueOf(Ran.getNumber(8)+1), null, null);
opeList.get(num1).setRchild(rchild);
}
}
num1 = num1 + i%2;
}
}

对结对的小伙伴做出评价(重点指出需要改进的地方)

我的结对伙伴是我的室友,所以本次编程是我们坐在一起完成的。
改进的地方:我们生活作息不太一致,她喜欢晚上编程,而我喜欢白天编程,这导致我们共同交流的时间少,希望互相协调一下,增加我们共同交流的时间。
给小伙伴打分:48

如有参考或引用的设计、实现,请进行说明

参考:http://www.cnblogs.com/vertextao/p/6896953.html

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 610 920
Development 开发 50 40
· Analysis · 需求分析 (包括学习新技术) 30 20
· Design Spec · 生成设计文档 30 50
· Design Review · 设计复审 (和同事审核设计文档) 60 100
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 100 90
· Coding · 具体编码 100 300
· Code Review · 代码复审 30 60
· Test · 测试(自我测试,修改代码,提交修改) 30 90
Reporting 报告 60 60
· Test Report · 测试报告 30 30
· Size Measurement · 计算工作量 20 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 20
合计 610 920
posted @ 2017-06-04 21:56  张韵琪  阅读(222)  评论(3)    收藏  举报