• 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()  +'
    ');
                }
                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
  • 相关阅读:
    VECTOR的用法
    【转】C/C++中的Split函数(字符串自动分割)
    【转】动态树
    【实验】vector性质
    【转】Android操作系统安全研究系列——键盘记录
    D8神贴
    【操作系统】修改WIN7下的文件关联与默认程序
    【转】探寻C++最快的读取文件的方案(方法未论证)
    如何在60分钟之内过掉600个单词
    【转】动态树:实现
  • 原文地址:https://www.cnblogs.com/Tiffany23/p/6940359.html
Copyright © 2020-2023  润新知