博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件工程概论作业
阅读量:6121 次
发布时间:2019-06-21

本文共 4215 字,大约阅读时间需要 14 分钟。

设计思路:

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

 

结果截图:

结对照片

 

转载于:https://www.cnblogs.com/my1204/p/5612539.html

你可能感兴趣的文章
超实用Mac软件分享(二)
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
Oracle表分区
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>