• 2017-2018-2 20165220『Java程序设计』课程 结对编程练习_四则运算


    需求分析

    题目要求

    一个命令行程序实现:

    • 自动生成小学四则运算题目(加、减、乘、除)
    • 支持整数
    • 支持多运算符(比如生成包含100个运算符的题目)
    • 支持真分数
    • 统计正确率

      需求理解

      1. 输入:需要计算的式子数、计算结果

        输出:判断后的答案(true/false)
      2. 满足真分数的运算如:1/3 + 1/4 = 7/12
      3. 处理的运算符为 +, −, ×, ÷
      4. 能处理用户的输入,并判断对错,统计正确率。
    中缀表达式转换为后缀表达式

    法则:

    • 如果遇到数字,我们就直接将其输出。
    • 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
    • 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
    • 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
    • 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

    测试说明

    产品代码主要进行三个方面的测试:

    • 正常测试
    • 异常测试
    • 边界测试

    实验过程

    • 首先要有一个方法类实现计算方法
    • 然后再有一个类作为错误判断测试输出。

    • 核心代码:加减乘除的运算
    • 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王杨鸿永

      起初看到四则运算我一位只是做一个简易的计算器,当打开要求发现事情并没有那么简单。然后就开始各种思考参考,想出类似于伪代码的一个框架,按照框架一步步实现,但是由于能力和学识的限制很多功能并不能很好的实现,或者没法实现没做出来。目前出来的算是勉强可以看的结果吧。后续还会接着改进。

  • 相关阅读:
    oralce索引的使用
    oracle中connect by prior的使用
    oracle函数listagg使用
    oracle函数的使用
    redis高可用集群搭建
    Node.js安装及环境配置之Windows篇
    Repeater 合并单元格
    c#16进制转浮点数单精度类型
    EF Core 实体映射表或视图
    docker 构建filebeat镜像
  • 原文地址:https://www.cnblogs.com/brs6666/p/8850295.html
Copyright © 2020-2023  润新知