隔壁村小学的小朋友都羡慕哭了2.0版


一、预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 15 20
• Estimate • 估计这个任务需要多少时间 800 1000
Development 开发 600 600
• Analysis • 需求分析 (包括学习新技术) 30 60
• Design Spec • 生成设计文档 20 30
• Design Review • 设计复审 10 30
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 10 10
• Design • 具体设计 30 40
• Coding • 具体编码 400 500
• Code Review • 代码复审 20 15
• Test • 测试(自我测试,修改代码,提交修改) 60 45
Reporting 报告 60 60
• Test Repor • 测试报告 30 30
• Size Measurement • 计算工作量 20 15
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 20 30
合计 1000

二、需求分析

我通过网上查阅和询问担任担任小学老师的姑姑了解到,小学三年级数学四则混合运算有如下的几个特点:

  • 会1000以内加减乘除法(通过查阅教材发现:要求掌握两位数乘除两位数)
  • 运算符在2~4个
  • 可以加括号
  • 减法运算的结果不能有负数
  • 除法运算除数不能为0,不能有余数

三、设计

1. 设计思路

说明你如何设计这个程序

  • 首先,我先分析了三年级题目的难度,确认了生成随机两位数的大小
  • 然后思考如何生成无括号的四则运算
  • 最后将括号加入,计算

2. 实现方案

写出具体实现的步骤

  • 分析了三年级题目的难度,确认了生成随机数的大小
  • 然后思考如何生成无括号的四则运算

四、编码

  • 首先我要解决的问题是,如何运算无括号的四则运算式
  • 我同样只用优先级的方法,写出Operation函数,先将* / 这种优先级较高的运算符运算,然后将运算过的符号与数值变为null,然后调用去除null的函数,将null移动至数组最后一位
  • 然后剩下的只有加减法,依次运算既可得出结果
  • 然后我们需要考虑括号因素,我打算先随机出括号的位置,与括号中的符号的数量,然后将括号内的数值与符号存入另一个数组,然后经过Operation函数运算,得出answer,然后将这些运算过的数值符号赋值null,调用removenull函数去除null
  • 然后我将已经去除括号的运算式再次使用Operation函数运算出结果

1. 调试日志

  • 在数组中存入数据,调用时发生越界,空指针

2. 关键代码

  1. public static double Operation(String[] OpeMarkStrNumber, String[] OpeNumber) { //首先遍历一遍存储运算符的数组,寻找到* /这种优先级较高的运算符,运算出结果,然后将运算过的符号与数值改为null,然后使用去除null的函数,去掉null数据
  2. while(true) {
  3. int PMAmount = 0;
  4. for(int i = 0; i < OpeMarkStrNumber.length-1; i++) {
  5. if(OpeMarkStrNumber[i] == "*") {
  6. double ans = Double.parseDouble(OpeNumber[i]) * Double.parseDouble(OpeNumber[i+1]);
  7. OpeNumber[i] = String.valueOf(ans);
  8. OpeNumber[i+1] = null;
  9. OpeMarkStrNumber[i] = null;
  10. OpeNumber = RemoveNull(OpeNumber);
  11. OpeMarkStrNumber = RemoveNull(OpeMarkStrNumber);
  12. PMAmount++;
  13. break;
  14. }else if(OpeMarkStrNumber[i] == "/") {
  15. double ans = Double.parseDouble(OpeNumber[i]) / Double.parseDouble(OpeNumber[i+1]);
  16. OpeNumber[i] = String.valueOf(ans);
  17. OpeNumber[i+1] = null;
  18. OpeMarkStrNumber[i] = null;
  19. OpeNumber = RemoveNull(OpeNumber);
  20. OpeMarkStrNumber = RemoveNull(OpeMarkStrNumber);
  21. PMAmount++;
  22. break;
  23. }
  24. }
  25. if(PMAmount == 0) {
  26. break;
  27. }
  28. }
  29. return PlusMinus(OpeMarkStrNumber, OpeNumber);
  30. }
  31. public static double PlusMinus(String[] OpeMarkStrNumber, String[] OpeNumber) { //当乘除法被消除完之后,可以依次运算加减法,最终得出结果
  32. int PMmarkNo = 0;
  33. double ans = Double.parseDouble(OpeNumber[0]) ;
  34. while(true) {
  35. if(OpeMarkStrNumber[PMmarkNo] == "+") {
  36. ans = ans + Double.parseDouble(OpeNumber[PMmarkNo+1]);
  37. PMmarkNo++;
  38. }else if(OpeMarkStrNumber[PMmarkNo] == "-"){
  39. ans = ans - Double.parseDouble(OpeNumber[PMmarkNo+1]);
  40. PMmarkNo++;
  41. }else if(OpeMarkStrNumber[PMmarkNo] == null){
  42. return ans;
  43. }
  44. }
  45. }
  46. public static String[] RemoveNull(String[] target) { //去除null 函数,将数组中的null移动至数组后面
  47. for(int i = 0; i < target.length; i++) {
  48. if(target[i] == null) {
  49. for(int j = i; j < target.length; j++) {
  50. if(j != target.length-1) {
  51. target[j] = target[j+1];
  52. }else {
  53. target[j] = null;
  54. }
  55. }
  56. }
  57. }
  58. return target;
  59. }

  1. ### 3. 代码规范
  2. 请给出本次实验使用的代码规范:
  3. - 第一条:不允许任何未经预先定义的常量直接出现在代码中。
  4. - 第二条:大括号的使用约定。如果是大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则:左大括号前不换行。左大括号后换行。右大括号前换行。右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
  5. - 第三条:左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。
  6. - 第四条:在 if/else/for/while/do 语句中必须使用大括号。
  7. - 第五条:任何二目、三木运算符的左右两边都需要加一个空格。
  8. - 第六条:单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。运算符与下文一起换行。方法调用的点符号与下文一起换行。方法调用时,多个参数,需要换行时,在逗号后进行。
  9. 并人工检查代码是否符合规范
  10. ## 五、测试
  11. - 输入5 3
  12. - 输出
  13. - (1)10*(17-7)=
  14. - (2)18*9/3=
  15. - (3)16*3-2-10=
  16. - (4)20/(16-15)=
  17. - (5)20-16-18/9=
  18. - ------------------标准答案------------------
  19. - (1)10*(17-7)=100.0
  20. - (2)18*9/3=54.0
  21. - (3)16*3-2-10=36.0
  22. - (4)20/(16-15)=20.0
  23. - (5)20-16-18/9=2.0
  24. ## 六、总结
  25. - 从刚看到题目时的不知所措,第一想法就是“我不会”,但是又想到这是一次结对作业,正所谓三个臭皮匠赛过诸葛亮,两个“臭皮匠"来解决这个三年级四则运算应该也绰绰有余了吧,通过相互间的讨论,解决了一些数组的越界,以及空指针的错误,节约了一些修改BUG的时间,对于不会的东西勤百度,这是解决问题的途径之一。
  26. ![](https://img2018.cnblogs.com/blog/1472256/201809/1472256-20180919000249848-31601213.jpg)

MathExam V2.0的更多相关文章

  1. 作业2-MathExam V2.0

    MathExam V2.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 50 • ...

  2. [Android]Android端ORM框架——RapidORM(v2.0)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...

  3. JuCheap V2.0响应式后台管理系统模板正式发布beta版本

    JuCheap V1.* 查看地址: http://blog.csdn.net/allenwdj/article/details/49155339 经过半年的努力,JuCheap后台通用响应式管理后台 ...

  4. python gettitle v2.0

    #!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...

  5. ".NET Compact Framework v2.0 could not be found."

    参考: http://blog.csdn.net/godcyx/article/details/7348431 问题原因: That's a known issue where VS can't di ...

  6. 【JS】heatmap.js v1.0 到 v2.0,详细总结一下:)

    前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这 ...

  7. 怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块

     因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我个人认为,好记性不如多做笔记多反思总结. 1.    前提条件 开发环境已正确配置 工程已解决JUnit依赖关系(pom ...

  8. 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github

    4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...

  9. 【原创】风讯DotNetCMS V1.0~V2.0 SQL注入漏洞

      文章作者:rebeyond 注:文章首发I.S.T.O信息安全团队,后由原创作者友情提交到乌云-漏洞报告平台.I.S.T.O版权所有,转载需注明作者. 受影响版本:貌似都受影响. 漏洞文件:use ...

随机推荐

  1. 20155318 《网络攻防》 Exp8 Web基础

    20155318 <网络攻防> Exp8 Web基础 基础问题 什么是表单? HTML表单用于收集用户输入,用元素定义,包含不同类型的input元素.复选框.单选按钮.提交按钮等等.一个表 ...

  2. libgdx学习记录11——平铺地图TiledMap

    地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机Otho ...

  3. ECMAScript6——Set数据结构

    /** * 数据结构 Set */ // ----------------------------------------------------- /** * 集合的基本概念:集合是由一组无序且唯一 ...

  4. PowerBI开发 第二篇:数据建模

    在分析数据时,不可能总是对单个数据表进行分析,有时需要把多个数据表导入到PowerBI中,通过多个表中的数据及其关系来执行一些复杂的数据分析任务,因此,为准确计算分析的结果,需要在数据建模中,创建数据 ...

  5. HTML 脚本 (Script) 实例

    1.JavaScript 使 HTML 页面具有更强的动态和交互性.HTML script 元素<script> 标签用于定义客户端脚本,比如 JavaScript. script 元素既 ...

  6. 3dmax2020下载安装3dmax2020破解中文版下载安装

    3dmax在室内设计.建筑设计领域是最专业的效果图制作软件,也是在游戏动画等领域中在场景方面最专业的软件,目前最新3dmax2020版本已出,我分享亲测好用的软件包,拿走不谢! 3dmax2020安装 ...

  7. 云容器云引擎:容器化微服务,Istio占C位出道

    在精彩的软件容器世界中,当新项目涌现并解决你认为早已解决的问题时,这感觉就像地面在你的脚下不断地移动.在许多情况下,这些问题很久以前被解决,但现在的云原生架构正在推动着更大规模的应用程序部署,这就需要 ...

  8. ubuntu16.04下Hyperledger之搭建Fabric环境简单操作(五步启动e2e_cli)

    如果你已经安装好go等工具.git及checkout相关代及下载相关镜像,您只需下面5步就能up e2e_cli~/go/src/github.com/hyperledger/fabric$ sudo ...

  9. EOS开发基础之三:使用cleos命令行客户端操作EOS——关于钱包wallet和账户account

    好了,上一节我们已经讲了关于wallet的一些基础操作,基本了解了怎么去创建一个钱包,怎么去查看钱包.上锁和解锁钱包等,这一节咱们就来开始操作账户account吧. 上一节讲到了每一个account都 ...

  10. #Leetcode# 725. Split Linked List in Parts

    https://leetcode.com/problems/split-linked-list-in-parts/ Given a (singly) linked list with head nod ...