MathExam

MathExam v9.999

一、预估与实际

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

二、需求分析

我通过百度的方式了解到,小学一、二年级数学有如下的几个特点:

  • 特点1:一年级的加减法都是在0-100间进行计算的
  • 特点2:都是整数,没有小数
  • 特点3:没有负数
  • 特点4:二年级乘法与除法源于九九乘法中的计算
  • 特点5:除法中除数不能为0

经过分析,我认为,这个程序应当:

  • 加减法使用的数字为0-100
  • 生成减法时注意结果不能为负数
  • 乘法题只生成乘法表中有的

三、设计

1. 设计思路

  • 程序有一个类,主要有四个方法,用于实现以下几个目的:
    • 随机生成所需的数字
    • 对题目进行计算
    • 将题目与答案写入文档中
  • 算法的关键:
    • 判断输入的格式是否正确并给予提示
    • 如何按照正确的格式将题目写入文档

2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地,编写代码后通过git远程上传到Github上
  • 思路:通过创建数组保存题目所需的两个数以及计算后的答案,最后按照格式写入文档中,另外在输入题数与年级时,需判断输入的格式是否正确,不正确时应给予相应的提示
  • 技术关键点:1.如何随机生成一个数字;2.如何判断输入的格式是否符合要求

四、编码

1. 调试日志

首先从键盘输入一个数n,然后创建三个大小为n的整型数组和一个字符数组分别来记录题目所需的两个数、计算结果以及符号,之后随机生成n组数和符号,然后进行计算,最后按照格式将题目与答案写入文档中

  • 问题:第一次出的减法的题目中存在结果为负数的题目,后对其进行了修改,再没有对输入的数判断格式,后添加了判断其是否为数字的方法,当输入错误时给予提醒并重新输入

2. 关键代码

if(m==1) { for (int i = 0; i < a.length; i++) { a[i]=(int)(Math.random()*101); b[i]=(int)(Math.random()*101); t=(int)(Math.random()*2); while(a[i]<b[i]&&t==1) { a[i]=(int)(Math.random()*101); b[i]=(int)(Math.random()*101); t=(int)(Math.random()*2); } if(t==0) d[i]='+'; else d[i]='-'; } } if(m==2) { for (int i = 0; i < a.length; i++) { t=(int)(Math.random()*2); if(t==0) { a[i]=(int)(Math.random()*10); b[i]=(int)(Math.random()*10); } else { a[i]=(int)(Math.random()*82); b[i]=(int)(Math.random()*9)+1; } if(t==0) d[i]='*'; else d[i]='/'; } }
随机生成我们所需要的数字

3. 代码规范

请给出本次实验使用的代码规范:

  • 第一条:在 if/else/for/while/do 语句中必须使用大括号。 即使只有一行代码,避免使用单行的形式: if (condition) statements;
  • 第二条:表达异常的分支时, 少用 if-else 方式。如果非得使用 if()...else if()...else...方式表达逻辑,避免后续代码维护困难, 请勿超过 3 层
  • 第三条:有 try 块放到了事务代码中, catch 异常后,如果需要回滚事务,一定要注意手动回滚事务
  • 第四条:在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度
  • 第五条:Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。
  • 第六条:方法名首字母小写

五、测试

  • 输入:10
    1(正确)
  • 输入:10 0/001/asdad/ 545 45 4/
    1(请输入正确的题数)
  • 输入:10
    1 0/001/asdasd/3(请输入正确的年级)
  • 输入:10 0/001/wqd/ 4554 5 6 /
    1 0/002/4/ 1 /4 55 6/(请输入正确的题数与年级)

    六、总结

    注意将每个功能的代码单独写成一个方法,便于查看和理解;尽量将代码简化优化,减少不必要的变量的使用,选用更优的算法,避免开辟不必要的空间内存;注意理清代码的层次与结构,以及每个方法之间的联系

转载于:https://www.cnblogs.com/txq1997/p/9630152.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值