20161207 结对编程-四则运算(挑战出题)
结对伙伴:石亚鑫 20162303
需求分析
1.此次作业请在http://git.oschina.net/上新建一个仓库提交代码,并且在博客中给出仓库连接(代码托管)
为了和之前的代码有所区分,所以在班级码云下创建了新的结对项目,下面已经给出了此次的代码托管链接
2.自己输入题目数,生成的运算符数量,输出的文件名
System.err.println ("java ExpressionGenerator <number-of-expressions> <number-of-operator> <output-file-path>");
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 <number-of-expressions> <number-of-operator> <output-file-path>");
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() +'
');
}
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 |