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

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()  +'\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  张韵琪  阅读(182)  评论(3编辑  收藏  举报