欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

四则运算3(二柱子同学的第三炼狱)

发布时间:2024/7/19 编程问答 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 四则运算3(二柱子同学的第三炼狱) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

设计思路:

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输出左括号

   3inOrderTraverse(node.left); 

   34输出本节点权值

   3inOrderTraverse(node.right); 

   36输出右括号 

 

4、求值函数int evaluateExpTree(Node)

   4lvaluervalue并初始化为0

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

   43如果节点不是运算符

       431递归计算左子树值为lvalue 

       432递归计算右子树值为rvalue 

       433根据节点计算符计算

5、判断答案是否正确

 

代码如下:

1 package 四则运算3; 2 3 import java.util.Scanner; 4 5 //节点类 6 class Node 7 { 8 public Node root; 9 public Node left; 10 public Node right; 11 public String weight; 12 13 public void setroot(Node r) 14 { 15 root=r; 16 } 17 18 public void setleft(Node l) 19 { 20 left=l; 21 } 22 public void setright(Node r) 23 { 24 right=r; 25 } 26 public void setweight(String w) 27 { 28 weight=w; 29 } 30 public String getweight() 31 { 32 return weight; 33 } 34 } 35 36 37 public class Test { 38 39 //控制式子长度 40 static int flag=0; 41 static String shizi=""; 42 43 //初始化树函数(当前节点,当前节点父节点) 44 static void setTree(Node now,Node root) 45 { 46 47 now.left=new Node(); 48 now.right=new Node(); 49 now.setroot(root); 50 //用于判定是符号-1还是数字-0 51 int panding=(int)(Math.random()*2); 52 //System.out.println(panding); 53 54 if(panding==1) 55 { 56 //生成符号 57 //System.out.println("生成符号"); 58 int fuhao=(int)(Math.random()*4); 59 if(fuhao==0) now.setweight("+"); 60 if(fuhao==1) now.setweight("-"); 61 if(fuhao==2) now.setweight("*"); 62 if(fuhao==3) now.setweight("*"); 63 //System.out.println(now.getweight()); 64 setTree(now.left,now); 65 setTree(now.right,now); 66 } 67 if(panding==0) 68 { 69 //System.out.println("生成数字"); 70 now.setweight(""+(int)(Math.random()*100)); 71 flag++; 72 //System.out.println(now.getweight()); 73 } 74 75 } 76 //遍历函数(生成算式) 77 static void inOrderTraverse(Node now){ 78 79 if(now.weight==null) return; 80 else{ 81 shizi=shizi+"("; 82 inOrderTraverse(now.left); 83 shizi=shizi+now.getweight(); 84 inOrderTraverse(now.right); 85 shizi=shizi+")"; 86 87 } 88 89 } 90 //求值函数 91 static int evaluateExpTree(Node now){ 92 int lvalue=0,rvalue=0; 93 int zhi=0; 94 //如果本节点是符号则递归否则返回本值 95 if(now.left.getweight()!=null){ 96 //System.out.println("是符号"+now.getweight()); 97 lvalue=evaluateExpTree(now.left); 98 rvalue=evaluateExpTree(now.right); 99 } 100 else 101 { 102 //System.out.println("是数字"+now.getweight()); 103 zhi=Integer.parseInt(now.getweight()); 104 } 105 //System.out.println("左值为"+lvalue); 106 //System.out.println("右值为"+rvalue); 107 if(now.weight.charAt(0)=='+') zhi=lvalue+rvalue; 108 if(now.weight.charAt(0)=='-') zhi=lvalue-rvalue; 109 if(now.weight.charAt(0)=='*') zhi=lvalue*rvalue; 110 if(now.weight.charAt(0)=='/') zhi=lvalue/rvalue; 111 //System.out.println("值为"+zhi); 112 return zhi; 113 } 114 115 116 public static void main(String args[]) 117 { 118 119 for(int i=0;i<10;i++){ 120 Node initial = new Node(); 121 initial.setweight("+"); 122 Node ltree=new Node(); 123 Node rtree=new Node(); 124 initial.setleft(ltree); 125 initial.setright(rtree); 126 //判断数字位数,超过则重新出题 127 while(flag==0||flag>4) 128 { 129 flag=0;setTree(ltree,initial); 130 } 131 flag=0; 132 while(flag==0||flag>4) 133 { 134 flag=0;setTree(rtree,initial); 135 } 136 137 138 inOrderTraverse(initial); 139 shizi=shizi+"="; 140 System.out.println(shizi); 141 System.out.println("请输入答案"); 142 Scanner sca=new Scanner(System.in); 143 int answer=sca.nextInt(); 144 if(answer==evaluateExpTree(initial)) 145 System.out.println("回答正确"); 146 else 147 System.out.println("回答错误,正确答案是"+evaluateExpTree(initial)); 148 149 shizi=""; 150 flag=0; 151 } 152 153 154 } 155 156 }

 

 

截图如下:

 

转载于:https://www.cnblogs.com/hehejeson/articles/5322971.html

总结

以上是生活随笔为你收集整理的四则运算3(二柱子同学的第三炼狱)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。