随机生成--小学计算题
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 700 | 750 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 20 | 30 |
• Design Spec | • 生成设计文档 | 30 | 30 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
• Design | • 具体设计 | 30 | 30 |
• Coding | • 具体编码 | 300 | 400 |
• Code Review | • 代码复审 | 20 | 20 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 170 |
Reporting | 报告 | ||
• Test Repor | • 测试报告 | 10 | 10 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 20 | 25 |
合计 | 750 |
二、需求分析
我通过百度小学一年级数学题大全的方式了解到,小学一年级数学有如下的几个特点:
- 特点1 均为100以内的正数
- 特点2 结果通常是正数
经过分析,我认为,这个程序应当:
- 使用的数字小于100的数
- 减数须比被减数小
- 运算结果均保证为正
三、设计
1. 设计思路
实验一:
- 第一步,设计题目的算法大致框架,其次设置随机数的生成,最后根据需求后的结果对一些特殊情况细化
- 第二步,文件的创建与读写,以此来记录题目与答案
- 第三步,考虑用户输入参数的各种情况,并对其特殊情况分别进行合理处理,确保程序可正常运行
实验二:
- 第一步,在加减后,添加四则运算中的乘除算法
- 第二步,新增的一个参数,先年级初始化为1,其次运用条件算法对随机数进行判断,来区分不同的年级
2. 实现方案
具体实现的步骤:
- 准备工作:先在Github上创建仓库,克隆到本地...
- 技术关键点:Git的使用,仓库的创建,文件的上传.....
四、编码
1. 调试日志
- 由于没有考虑到用户输入时会输入非数字的情况,编译出现异常,通过for循环用charAt方法进行比对,得以解决。其次未考虑到000000001的情况,导致抛出“输入参数过大”异常,运行结束,通过请教同学,得以知道可以使用replaceFirst方法来处理这种情况。
- 题数没有初始化,导致out.txt文件无内容,使用Interger.parseInt(args[0])语句初始化题数。
- 由于年级未当作参数没传入方法内,故无法辨别年级,致使随机生成的题目只有初始化一年级的加减算法,通过传参解决。
- 余数条件设定不正确,以至于35/35也产生了余数,通过在余数输出的if语句添加条件(两数模不为0),让其不执行该语句,使其正常输出,以此来解决余数输出错误的问题。
2. 关键代码
while (right == 0) {
right = (int) (Math.random() * 100);
}
result = left / right;
if (left % right == 0) {
break;
} else {
if (left < right) {
remainder = left;
} else if (left > right) {
remainder = left % right;
}
}
break;
------------余数的生成结果
if (symbol.equals("/")&&(left % right != 0)) {
if (remainder != 0 || (remainder == 0 && left == 0)) {
answers.append("(" + i + ") " + left + " " + symbol + " " + right + " " + "= "
+ result + "......"+remainder+ "
");}
}else {
answers.append("(" + i + ") " + left + " " + symbol + " " + right + " " + "= " + result + "
");}
}
-------------余数的追加
3. 代码规范
请给出本次实验使用的代码规范:
- 第一条,类型与中括号紧挨相连来定义数组
- 第二条,杜绝完全不规范的缩写,避免忘文不知义
- 第三条,不允许任何魔法值(即未经预先定义的常量)直接出现在代码中
- 第四条,final可以声明类、成员变量、方法、以及本地变量
- 第五条,左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格
- 第六条,注释的双斜线与注释内容之间有且仅有一个空格
- 第七条,方法参数在定义和传入是,多个参数逗号后边必须加空格
- 第八条,没有必要增加若干空格来是耨一行的字符与上一行对应位置的字符对齐
五、测试
实验一:
- 输入:0 输出:请输入参数(1为起始)!
- 输入:5 输出:一年级计算题题目已经生成,详情请见out.txt-
- 输入:1 1 输出:至多输入1个参数!
- 输入:99......999 输出: 输入的第一个参数数值太大!
- 输入:0....01 输出:一年级计算题题目已经生成,详情请见out.txt
- 输入:2ab3 输出:请输入正整数!
- 输入:a 输出:请输入正整数!
实验二:
- 输入:1 输出: 请输入2个参数!
- 输入:1 2 3 输出:最多两个参数!
- 输入:00000000001 2 输出:题目已经生成,详情请见out.txt
- 输入:100000000 1 输出:输入的第一个参数数值太大!
- 输入:a a 输出:请输入正整数!
- 输入:2a 1 输出:请输入正整数!
- 输入:0 2 输出:请输入参数(1为起始)!
- 输入:10 3 输出:第二个参数请输入1或2!
- 输入:10 1 输出:题目已经生成,详情请见out.txt
- 输入:10 2 输出:题目已经生成,详情请见out.txt
六、总结
- 看到题目很慌张,题目理解了许久许久,才大致懂题目的要求。打代码之前的需求分析以及理清思路真的是无比重要,由于拿到题目不管三七二十一立刻打开eclipse开始埋头打代码,边想边打,效率太低下了,还有就是基础知识太重要了,因为基础知识不够扎实,导致总是东翻翻西翻翻,查找资料。想要提高效率,绝对是得改掉这些个坏毛病,做好前期知识的储备。