軟體工程概論作業

來源:互聯網
上載者:User

標籤:

設計思路:

1、定義類node,變數有node類型root ,left,right以及string類型weight

 

2、初始化函數(以一個新節點為當前節點,根節點為null),設定一個計數器flag=0

   2、1初始化weight值,隨機數字或符號(若i>=3則必為數將算式限定在10個數以內)

       2、11若weight值為符號則i++且調用此初始化函數,(以left為當前節點,本函數中節       點為根節點。)

       2、12若weight為符號則i++且調用此初始化函數,(以right為當前節點,本函數中節點為根節點。)

  

 

3、遍曆函數 void inOrderTraverse(Node node)

   3、1判斷node函數是否為空白,為空白則return

   3、2輸出左括弧

   3、3 inOrderTraverse(node.left); 

   3、4輸出本節點權值

   3、5 inOrderTraverse(node.right); 

   3、6輸出右括弧

 

4、求值函數int evaluateExpTree(Node)

   4、1 設lvalue和rvalue並初始化為0

   4、2 如果節點為運算元,返回該值

   4、3如果節點不是運算子

       4、31遞迴計算左子樹值為lvalue

       4、32遞迴計算右子樹值為rvalue

       4、33根據節點計算符計算

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

 

結果:

結對照片

 

軟體工程概論作業

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.