小学生最爱的计算题生成器

最可爱的标题

一、预估与实际

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

二、需求分析

我通过查询教学大纲及研究相关试卷的方式了解到,小学一年级及二年级数学有如下的几个特点:

  • 特点1
    • 加法的和应该小于等于100
  • 特点2
    • 减法的差应该大于0
  • 特点3
    • 无论是加法还是减法,两侧数都不应该超过100
  • 特点4
    • 乘法只在99乘法表范围内
  • 特点5
    • 被除数要大于0小于100
  • 特点6
    • 除数应该是个位数

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

  • 使用的数字小于100
  • 要保证加法时的不超过100
  • 要保证减法时的差不为负数
  • 乘法时左右两边都应该是个位数
  • 除法时要保证被除数大于除数
  • 被除数及除数不能为0
  • 除数及商需要为个数

三、设计

1. 设计思路

  • 这个程序有一个类,3个函数
    • 主函数负责判断传入参数是否合法并将合法参数传给math函数生成题目
    • check函数负责生成相应随机数并判断是否合适
    • math函数负责调用check函数获取合适的数值及符号最后写入文件
  • 算法的关键的关键是什么?
    • 生成合适的随机数
    • 各函数之间的功能联系
    • 出错后的提示,并且让程序顺利结束

2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地
  • 技术关键点:梳理一下设计思路,可能遇到哪些技术关键点
    • 随机数的使用,本程序需要大量的使用Math.random()方法
    • 全局静态变量的使用,本程序需要多个静态函数共享数据
    • ArrayList数组的使用,用该数组存储题目及答案的字符串,相比普通数组,该数组可以动态增加空间

四、编码

1. 调试日志

  • 在代码的什么位置,代码出现了什么问题,问题会导致什么结果,怎么解决的
    • 在主函数中判断参数时我直接将String类型的参数通过Integer.parseInt()方法转换成数值,当参数为非数值时程序则会出错。处理方法:用一个函数判断输入参数是否为数字字符串,最后再将字符串参数转为int型数值

    • 在主函数中,将字符串转为int型数值时,若传入参数数值超过int型数值范围则程序出错。处理方法:考虑到实际情况,用户需要的题目数量本就不需要太多,则可以直接限制出题数量,在判断完传入的参数字符串是数字串后直接限制字符串的长度不超过4,则可以保证数值不大于9999。

2. 关键代码

请展示一段程序的关键代码,并解释代码的作用

public static boolean checkOne() {
        a = (int) (0 + Math.random() * (100 - 0 + 1));
        b = (int) (0 + Math.random() * (100 - 0 + 1));
        // sym为1即为正,2即为负
        sym = (int) (1 + Math.random() * (2 - 1 + 1));
        if (sym == 1) {
            if ((a + b) > 100) {
                return false;
            } else {
                return true;
            }
        } else {
            if ((a - b) < 0) {
                return false;
            } else {
                return true;
            }
        }
    }
public static void mathOne(int n) {
        String prob;
        String ans;
        ArrayList<String> probs = new ArrayList<String>();
        ArrayList<String> anss = new ArrayList<String>();
        boolean end = false;
        for (int i = 1; i <= n; i++) {
            do {
                end = checkOne();
            } while (!end);
            // sym为1即为正,2即为负
            if (sym == 1) {
                prob = "(" + i + ")" + " " + a + " " + "+" + " " + b;
                ans = "(" + i + ")" + " " + a + " " + "+" + " " + b + " " + "=" + " " + (a + b);
            } else {
                prob = "(" + i + ")" + " " + a + " " + "-" + " " + b;
                ans = "(" + i + ")" + " " + a + " " + "-" + " " + b + " " + "=" + " " + (a - b);
            }
            probs.add(prob);
            anss.add(ans);
        }
    }
  • 该段代码有两个方法,math方法调用check方法用来生成符号及符号两边的数,并且判断生成的数是否合适,合适的时候该函数才会返回真,此时math才能继续执行,将问题及答案存入ArrayList数组。

3. 代码规范

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

  • 第一条、代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
  • 第二条、类名使用UpperCamelCase风格
  • 第三条、方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵循驼峰形式。
  • 第四条、方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵循驼峰形式。

五、测试

请思考并记录你认为必要的测试点,并记录测试用例与测试结果

测试项目测试语句预期结果测试结果
不输入任何参数java MathExam4269输入的参数个数不为2,请重试输入的参数个数不为2,请重试
输入一个参数java MathExam4269 20成功写入20道一年级题目到文件out.txt成功写入20道一年级题目到文件out.txt
输入二个参数java MathExam4269 20 1成功写入20道一年级题目到文件out.txt成功写入20道一年级题目到文件out.txt
输入二个参数且第一个参数小于0java MathExam4269 -10 1输入有误,请重新输入输入有误,请重新输入
输入二个参数且第一个参数大于9999java MathExam4269 10000 1输入题数过大,请重试输入题数过大,请重试
输入二个参数且第二个参数不为1和2java MathExam4269 20 5输入的年级有误,请重试输入的年级有误,请重试

六、总结

  • 开始时应该花更多时间分析需求,设计程序架构,能为后续的开发提高很多效率

  • 要考虑到后续可能的升级,把需要的功能拆分成函数,专门的功能由专门的函数处理

  • 重复的代码太多,需要进一步优化

  • 调试程序时要考虑到尽可能多的情况

转载于:https://www.cnblogs.com/lk123/p/9630840.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值