结队编程项目——四则运算

一、项目与分析

项目功能

自动生成小学四则运算题目(加、减、乘、除)并统计正确率

  • 支持整数
  • 支持多运算符(比如生成包含100个运算符的题目)
  • 支持真分数

分析

  • 生成整数与真分数:实现了生成真分数即可利用分数的约分机制使其生成整数。
  • 生成四则运算:最初想的方法是四则运算的生成可利用加减乘除的符号分别与数字1、2、3、4相对应,随机生成四个数字再利用switch多分支语法即可生成相应符号。但在后来的实践过程中发现这种方法并不能很好的实现,因为读取字符串的时候最好直接能读取符号和数字,避免二者交叉,所以采取了先在一个数组中定义好四个符号,然后在生成算式的时候,利用rand产生随机数,然后指向数组中不同位置的符号,即可生成
  • 支持多运算符:运算符的数量是通过源代码来决定的,可根据修改源代码来更改生成运算符的个数。

    二、设计思路

    代码应该包含四个方面:可产生随机分数、可产生字符串(即算术题)、可计算产生的字符串、可对分数进行约分与加减乘除操作。
  • 产生随机分数,在主函数中先随机产生两个整数,再在一个类中进行约分,因此我们设置了Rational类。
  • 产生字符串,有了分数,我们只需要再找个符号就可以了,我们在主函数中利用分析中生成四则运算的思路利用rand产生了符号,最后在输出的时候设置固定的括号位置,最后一个算式就诞生了。
  • 计算产生的字符串,我们把输出的字符串再读入到电脑中,利用老师给的思路,构建一个计算器,分别利用数字栈和符号栈来读字符串,根据运算符的先后顺序执行了弹栈,即遇到加号先存,遇到右括号则执行之前的算式,遇到乘除则弹出栈顶两个数字进行运算。

    UML类图

    1594162-20190404220642645-707634932.png

三、关键代码

  • 题目生成

      for(int i=1;i<=n;i++) {
          System.out.println("题目"+i+":");
      //  calculator.a=read.nextLine();
          a = rand.nextInt(100);
          b = rand.nextInt(100);
          c = rand.nextInt(100);
          calculator1.a = "("+a+""+ch[rand.nextInt(ch.length)]+ b+""+")"+ch[rand.nextInt(ch.length)]+c+"";
  • 约分

        double numerator = 1 ;   //分子
        double denominator = 1; //分母
            void setNumerator(double a) {  //设置分子
               double c=f(Math.abs(a),denominator);  //计算最大公约数
               numerator = a/c;//约分
               if(numerator<0&&denominator<0) { //分子分母负数情况
               numerator = -numerator;
               denominator = -denominator;
                   }
               }
         void setDenominator(double b) {  //设置分母
        double c=f(numerator,Math.abs(b));  //计算最大公约数
        denominator = b/c;
        if(numerator<0&&denominator<0) {
        numerator = -numerator;
        denominator = -denominator;
              }
           }

四、遇到的困难及解决办法

  • 问题1:如何解决读取算式的问题
  • 解决方法:将算式放入字符串变量中,再用数组访问的方法挨个访问

五、功能展示

1594162-20190404220458162-1192615888.png

六、对小伙伴文航的评价:

做项目最重要的不是积极,热情,而是能够一直积极,热情,在最初的兴奋退却后,只有坚持不懈,才能成功,而小谢就是这样的人,我相信,我们在这一学期的结对之中都能够收获颇丰。

七、PSP图

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2030
· Estimate· 估计这个任务需要多少时间3030
Development开发300200
· Analysis· 需求分析 (包括学习新技术)300100
· Design Spec· 生成设计文档3020
· Design Review· 设计复审 (和同事审核设计文档)3020
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)3030
· Design· 具体设计18090
· Coding· 具体编码100120
· Code Review· 代码复审6040
· Test· 测试(自我测试,修改代码,提交修改)3040
Reporting报告6060
· Test Report· 测试报告6060
· Size Measurement· 计算工作量3020
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划6040
合计1320900

转载于:https://www.cnblogs.com/wxhblogs/p/10657262.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值