zoukankan      html  css  js  c++  java
  • 软件工程概论作业03

    设计思路:

    1、定义类node,变量有node类型root leftright以及string类型weight

    2、初始化函数(以一个新节点为当前节点,根节点为null),设置一个计数器flag=0

       21初始化weight值,随机数字或符号(若i>=3则必为数将算式限定在10个数以内)

           211weight值为符号则i++且调用此初始化函数,(以left为当前节点,本函数中节       点为根节点。)

           212weight为符号则i++且调用此初始化函数,(以right为当前节点,本函数中节点为根节点。)

      

    3、遍历函数 void inOrderTraverse(Node node)

       31判断node函数是否为空,为空则return

       32输出左括号

       33 inOrderTraverse(node.left); 

       34输出本节点权值

       35 inOrderTraverse(node.right); 

       36输出右括号

    4、求值函数int evaluateExpTree(Node)

       41 lvaluervalue并初始化为0

       42 如果节点为操作数,返回该值

       43如果节点不是运算符

           431递归计算左子树值为lvalue

           432递归计算右子树值为rvalue

           433根据节点计算符计算

    5、判断答案是否正确

    实验代码:

    package demo;
    import java.util.Random;
    import java.util.Scanner;
    
    
    class Node
        {
            public Node root;
            public Node left;
            public Node right;
            public String weight;
            
            public void setroot(Node r) {root=r;}//根植
            
            public void setleft(Node l)    {left=l;}//左子树
            
            public void setright(Node r) {right=r;}//右子树
            
            public void setweight(String w) {weight=w;}//判断运算符号
            
            public String getweight() {return weight;}
        }
        
        
    public  class show{
         
        //控制式子长度
        static int flag=0;
        static    String length="";
        
        static void setTree(Node zz,Node root)//初始化树
        {
            
            zz.left=new Node();
            zz.right=new Node();
            zz.setroot(root);
            int panding=new Random().nextInt(2);
            
            if(panding==1)
            {
                //生成符号
            
                int fuhao=new Random().nextInt(4);
                if(fuhao==0) zz.setweight("+");
                if(fuhao==1) zz.setweight("-");
                if(fuhao==2) zz.setweight("*");
                if(fuhao==3) zz.setweight("*");
                setTree(zz.left,zz);
                setTree(zz.right,zz);
            }
            if(panding==0)
            {
                int num=new Random().nextInt(100);
                zz.setweight(""+num);
                flag++;
                
            }
            
        }
    
        static     void inOrderTraverse(Node zz)//遍历生成算式
        {
            
            if(zz.weight==null) return;
            else{
                length=length+"(";
                inOrderTraverse(zz.left);
                length=length+zz.getweight();
                inOrderTraverse(zz.right);
                length=length+")";
                
            }
            
        }
        static    int evaluateExpTree(Node zz)//求值
        {
            int lvalue=0,rvalue=0;
            int ans=0;
            if(zz.left.getweight()!=null){
                lvalue=evaluateExpTree(zz.left);
                rvalue=evaluateExpTree(zz.right);
            }
            else 
            {    
            
                ans=Integer.parseInt(zz.getweight());
            }
        
            if(zz.weight.charAt(0)=='+') ans=lvalue+rvalue;
            if(zz.weight.charAt(0)=='-') ans=lvalue-rvalue;
            if(zz.weight.charAt(0)=='*') ans=lvalue*rvalue;
            if(zz.weight.charAt(0)=='/') ans=lvalue/rvalue;
        
            return ans;
        }
        
        
        public static  void main(String args[])
        {
                int j=0;
                System.out.println("请在等号后输入结果:");
                Scanner zhi=new Scanner(System.in);
                int []b=new int[30];
                for(int i=0;i<30;i++)
                {
                    Node initial = new Node();
                    Node ltree=new Node();
                    Node rtree=new Node();
                    initial.setweight("+");
                    
                    initial.setleft(ltree);
                    initial.setright(rtree);
                    //判断数字位数,超过则重新出题
                    while(flag==0||flag>4)
                    {
                        flag=0;setTree(ltree,initial);
                    }
                    flag=0;
                    while(flag==0||flag>4)
                    {
                        flag=0;setTree(rtree,initial);
                    }
                    
                    inOrderTraverse(initial);
                    length=length+"=";
                    System.out.println(length);
                    b[i]=zhi.nextInt();
                    if(b[i]==evaluateExpTree(initial))
                    {
                    j++;
                    System.out.println("结果正确");
                    
                    }
                    else System.out.println("结果错误,正确结果为:"+evaluateExpTree(initial)); 
                    length="";
                    flag=0;
                    
                
                }
                
                    System.out.println("做对了"+j+"道题");
        }
    
    }
    View Code

    结果截图:

     

    合作照片:

  • 相关阅读:
    【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- Swing
    【MySQL】-NO.21.MySQL.1.MySQL.1.001-【Install MySQL5.7 On Windows】
    【Java】-NO.17.EBook.4.Java.1.014-【疯狂Java讲义第3版 李刚】- Annotation
    【Java】-NO.20.Exam.1.Java.1.001- 【1z0-807】- OCEA
    【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举
    【Java】-NO.16.EBook.4.Java.1.006-【疯狂Java讲义第3版 李刚】- 垃圾回收
    【Java】-NO.16.EBook.4.Java.1.008-【疯狂Java讲义第3版 李刚】- 集合/容器
    【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型
    【Java】-NO.16.EBook.4.Java.1.010-【疯狂Java讲义第3版 李刚】- 异常
    【Java】-NO.16.EBook.4.Java.1.001-【疯狂Java讲义第3版 李刚】- UML
  • 原文地址:https://www.cnblogs.com/my1204/p/5325840.html
Copyright © 2011-2022 走看看