设为首页 加入收藏

TOP

软件工程(2018)结对编程第二次作业(一)
2019-09-17 15:48:52 】 浏览:41
Tags:软件工程 2018 结对 编程 第二 作业

一.题目要求

  • 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
    • 能够自动生成四则运算练习题
    • 可以定制题目数量
    • 用户可以选择运算符
    • 用户设置最大数(如十以内、百以内等)
    • 用户选择是否有括号、是否有小数
    • 用户选择输出方式(如输出到文件、打印机等)
    • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二.角色分工

驾驶员:杨浩(本人)
领航员:冯俊鹏 博客地址

三.代码及代码地址

代码地址

题目生成

class BinaryTree 
{
    
    private TreeNode root;
    private int num;
    private ArrayList<TreeNode> opeList = new ArrayList<TreeNode>();
    
    public BinaryTree(int num){
        this.num=num;
    }
    
    public int getNum(){
        return num;
    }
    
    public void setNum(int num){
        this.num = num;
    }
    
    public void setTreeNode(TreeNode root){
        this.root = root;
    }
    
    
    /**
     * 获取最终的表达式,必须在CalAndVal()方法后调用
     * 
     * @return str
     */
    public String toString(){
        String str = root.toString();
        str = str.substring(1, str.length()-1);
        return str;
    }
    
    /**
     * 计算并验证表达式
     * 
     * @return result
     */
    public String CalAndVal(){
        return root.getResult();
    }
    
    /**
     * 计算二叉树的深度(层数) 
     * 
     * @return deep
     */
    public int getDeep(){
        int i = this.num;
        int deep = 2;
        while(i/2 > 0){
            deep++;
            i /= 2;
        }
        return deep;
    }
    
    /**
     * 生成二叉树
     * 
     */
    public void createBTree(){
        TreeNode lchild, rchild, lnode, rnode;
        
        if(num == 1){
            lchild = new TreeNode(String.valueOf(Ran.getNumber(10)), null, null);
            rchild = new TreeNode(String.valueOf(Ran.getNumber(10)), 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(10)), null, null);
                    rnode  = new TreeNode(String.valueOf(Ran.getNumber(10)), 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(10)), null, null);
                        opeList.get(num1).setLchild(lchild);
                    }
                    else{
                        
                        rchild = new TreeNode(String.valueOf(Ran.getNumber(10)), null, null);
                        opeList.get(num1).setRchild(rchild);
                    }
                }
                num1 = num1 + i%2;
            }
        }
    }
}

 class Ran {
    
    /**
     * 获取随机的符号
     * 
     * @return operator
     */
    
    public static char getOperator(){
        char operator = 0;
        Random ran = new Random();
        int i = ran.nextInt(4);
        switch(i){
            case 0:
                operator = '+';
                break;
            case 1:
                operator = '-';
                break;
            case 2:
                operator = '*';
                break;
            case 3:
                operator = '/';
                break;
        }
        return operator;
    }
    
    
    /**
     * 根据输入的范围获取随机数
     * 
     * @param max
     * @return number
     */
    
    public static int getNumber(int max){
        int number = 0;
        max=test.maxNum;
        
            Random ran = new Random();
            number = ran.nextInt(max+1);
            return number;
    }
    
    /**
     * 根据运算符的个数随机产生子节点的位置
     * 
     * @param num
     * @return childPlace
     */
    
    public static boolean[] getChildPlace(int num){
        int d = 0;
        int size = 0,
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇动手实现一致性哈希算法,并搭建环.. 下一篇lnmp环境快速搭建及原理解析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目