需求分析
题目要求
一个命令行程序实现:
- 自动生成小学四则运算题目(加、减、乘、除)
- 支持整数
- 支持多运算符(比如生成包含100个运算符的题目)
- 支持真分数
-
统计正确率
需求理解
- 输入:需要计算的式子数、计算结果
输出:判断后的答案(true/false) - 满足真分数的运算如:1/3 + 1/4 = 7/12
- 处理的运算符为 +, −, ×, ÷
- 能处理用户的输入,并判断对错,统计正确率。
中缀表达式转换为后缀表达式
法则:
- 如果遇到数字,我们就直接将其输出。
- 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
- 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
- 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
- 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
测试说明
产品代码主要进行三个方面的测试:
- 正常测试
- 异常测试
- 边界测试
实验过程
- 首先要有一个方法类实现计算方法
-
然后再有一个类作为错误判断测试输出。
- 核心代码:加减乘除的运算
-
import java.util.Random; public class Output { private int a, b; private int i; private String operator[]={"+","-","×","÷"}; public Output(){ while(true){ a=new Random().nextInt(100); b=new Random().nextInt(100); i=new Random().nextInt(4); if(i==1&&a<b){ continue; } if(i==3){ if(b==0){ continue; } if(a%b!=0){ continue; } } break; } } public String getString(){ return new String(a+operator[i]+b+"="); } public boolean panduan(String s){ int i,result = 0; try{ i=Integer.valueOf(s).intValue(); }catch(Exception e){ return false; } switch(this.operator().toCharArray()[0]){ case '+':result=this.getA()+this.getB();break; case '-':result=this.getA()-this.getB();break; case '×':result=this.getA()*this.getB();break; case '÷':result=this.getA()/this.getB();break; } if(result==i){ return true; }return false; } public String operator(){ return operator[this.i]; } public int getA() { return a; } public int getB() { return b; } }
码云托管
运行测试
-
结对搭档
搭档:20165231王杨鸿永
起初看到四则运算我一位只是做一个简易的计算器,当打开要求发现事情并没有那么简单。然后就开始各种思考参考,想出类似于伪代码的一个框架,按照框架一步步实现,但是由于能力和学识的限制很多功能并不能很好的实现,或者没法实现没做出来。目前出来的算是勉强可以看的结果吧。后续还会接着改进。