高分小学计算器

高分小学计算器

一、预估与实际

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

二、需求分析

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

  • 特点1

    • 小学一年级:20以内不进位的加减法运算。
  • 特点2

    • 小学二年级:10以内的乘除法运算。
  • 经过分析,我认为,这个程序应当:
    -加减法使用的数字小于20
    -乘除法使用的数字在10以内

三、设计

1. 设计思路

  • 题目采用随机数的方法给出
  • 题目的答案存于数组
  • 利用比特流将答案和问题写入文件
  • 需要设计三个过程,一年级、二年级、输出。

2. 实现方案

写出具体实现的步骤

比如:

  • 准备工作:先在Github上创建仓库,克隆到本地...
  • 技术关键点:
    • 通过if、else判断条件来做continue继续下次循环还是break跳出整个循环。
    • 利用随机数random()来产生题目。
    • 第二位随机数根据第一位的个位数来限制最大取值范围。
    • FileOutputStream的write()方法来写入文件。
    • SimpleDateFormat的方法format()来获取当前系统时间。

四、编码

  • 遇到要循环输入的问题,使用无线循环,然后通过if、else判断条件来做continue继续下次循环还是break跳出整个循环。
    • 问题:出现死循环
  • 利用随机数random()来产生题目,再用两个字符串数组来存储题目和答案,除法多一个余数存储数组。
    -问题:出现数组空值或者越界
  • 第二位随机数根据第一位的个位数来限制最大取值范围,即可产生无进制的数学题目。
  • 将字符串数组转换成byte,再用FileOutputStream的write()方法来写入文件。
  • SimpleDateFormat的方法format()来获取当前系统时间。
    请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程

1. 调试日志

  • 想要循环进程从头开始,代码在cmd中运行会导致死循环,问题在于没给再一次输入参数,所以参数一直保持在循环条件,解决方法是加一个控制台输入。
  • 数组出现越界和空值的问题,给出现空值的数组赋上初值,越界的数组根据0和最后一个数字进行判断哪个地方出错,将有涉及数组的下表参数都从0开始,避免混乱。
  • cmd输入文件的未换行,经过查询知道cmd换行符/r/n

2. 关键代码

if(m == 1) {											//用随机数的方法来产生题目
					for(int i = 0;i < n;i++){
						int a = (int) (Math.random()*20);
						int b = (int) (Math.random()*(20-a));
						int c = (int) (Math.random()*2);
						if(c == 0) {
							System.out.println("("+(i+1)+")"+a+"+"+b+"=");;
							questionlist[i] = "("+(i+1)+")"+a+"+"+b+"=";
							answerlist[i] = " "+(a+b);
							
							}
						else {
							b = (int) (Math.random()*a+1);
							System.out.println("("+(i+1)+")"+a+"-"+b+"=");
							questionlist[i] = "("+(i+1)+")"+a+"-"+b+"=";
							answerlist[i] = " "+(a-b);
							}	
						byte[] ba = questionlist[i].getBytes();			//利用比特流输入文件
						String pa ="\r\n";
						byte[] ta = pa.getBytes(); 
						in.write(ba);
						in.write(ta);
						}
					}
				else  {
					for(int i = 0;i < n;i++){
						int a = (int) (Math.random()*9+1);
						int b = (int) (Math.random()*9+1);
						int c = (int) (Math.random()*2);
						if(c == 0) {
							System.out.println("("+(i+1)+")"+a+"*"+b+"=");
							questionlist[i] = "("+(i+1)+")"+a+"*"+b+"=";
							answerlist[i] = " "+(a*b);
						}
						else {
							
							System.out.println("("+(i+1)+")"+a+"÷"+b+"=");
							questionlist[i] = "("+(i+1)+")"+a+"÷"+b+"=";
							answerlist[i] = " "+(a/b);
							yushulist[i] = " "+(a%b);
						}
						byte[] ba = questionlist[i].getBytes();
						String pa ="\r\n";
						byte[] ta = pa.getBytes(); 
						in.write(ba);
						in.write(ta);
					}
				}
  • 使用随机数的方法来产生题目和字符串数组存储题目。

3. 代码规范

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

  • 第一条不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
  • 第二条左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。
  • 第三条任何二目、三木运算符的左右两边都需要加一个空格。

五、测试

  • 输入规定范围外的数
    • 输入-1,提示请输入大于0的正整数。
    • 输入0或1来选贼继续出题或者退出,输入3,提示请输入大于0的正整数。
    • 多次出题,未出现预定外的题目。

六、总结

-.敲代码总容易将简单的问题复杂化,我觉得写完应该认真排查,将不必要的代码简化。现在也许只有一百行左右的代码,但是养成好习惯,使用好代码规范,精简的代码有助于以后写代码。

posted @ 2018-09-11 15:13  jiowww  阅读(244)  评论(1编辑  收藏  举报