作业一
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 700 | 715 |
Development | 开发 | 480 | 540 |
• Analysis | • 需求分析 (包括学习新技术) | 30 | 40 |
• Design Spec | • 生成设计文档 | 10 | 5 |
• Design Review | • 设计复审 | 10 | 15 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 20 | 20 |
• Coding | • 具体编码 | 400 | 600 |
• Code Review | • 代码复审 | 30 | 20 |
• Test | • 测试(自我测试,修改代码,提交修改) | 10 | 15 |
Reporting | 报告 | 15 | 16 |
• Test Repor | • 测试报告 | 10 | 11 |
• Size Measurement | • 计算工作量 | 5 | 5 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 13 |
合计 | 1310 |
二、需求分析
我通过百度的方式了解到,小学一年级数学有如下的几个特点:
- 特点1:20以内的数的认识以及加减法
- 特点2: 没有小数,分数以及负数的运算
- 特点3:加减法要简单
经过分析,我认为,这个程序应当:
- 使用的数字小于100
- 加减法不能有小数,与负数
三、设计
1. 设计思路
- 将要输入的n个题的n存在args[0]中
- 设置随机输入的函数
- 将运行结果存在out.txt
- grade1运行一年级的加减,grade2运行二年级的代码
2. 实现方案
- 准备工作:先在Github上创建仓库,克隆到本地
- 技术关键点:梳理一下设计思路,可能遇到哪些技术关键点
- 上网查找一年级数学和二年级数学的特点,加减和乘除的难度范围
- 规划代码的布局了解要用到什么函数,方法。
四、编码
在编码的时候不知道该如何实现代码,有的方法要去上网查找,以及题数要存入数组args[0]中,在这次实验中不能抛异常,要解决异常,在捕获异常时,要把定义的参数放在里面不然在外面调用时会没被定义。以及在输出的out.txt在换行时" "在编译器里就是换行了,不过在window中txt没有换行,要用“ ”.
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
打印的问题与答案要空格分开,systm.out.println("
");println已经换一行了,加上“
”换了两行,应system。out.println();
以及在输出的out.txt在换行时"
"在编译器里就是换行了,不过在window中txt没有换行,要用“
”.
在除法中除数不能为零,要在除法钱判断除数是否为零
2. 关键代码
int operator = (int)(Math.random()2); //随即产生除法或乘法
if(operator==0){ //乘法
int num1 = (int)(Math.random()21);
int num2 = (int)(Math.random()21);
result = num1 * num2;//乘法的结果
System.out.println("("+(i+1)+") " + num1 + " * " + num2);//打印
str1[i]="("+(i+1)+") " + num1 + " * " + num2;//将问题存入字符串str1
str2[i]="("+(i+1)+") " + num1 + " * " + num2 + " = " + result;//将答案存入字符串str1
byte[] x1 =str1[i].getBytes();//为了将字符串存入out.txt要转换字节
byte[] x2 =str2[i].getBytes();
byte[] x3 =fengge.getBytes();
shuchu.write(x1);
shuchu.write(x3);
}
else if(operator==1){//随即产生除法或除法
int x = (int)(Math.random()21);//生成随机数
int y = (int)(Math.random()*21);
if(x%y==0 && y!=0 && x>y) {余数为零且除数不为零
result = x / y;
System.out.println("("+(i+1)+") " + x + " / " + y);
str1[i]="("+(i+1)+") " + x + " / " + y;
str2[i]="("+(i+1)+") " + x + " / " + y + " = " + result;
byte[] x1 =str1[i].getBytes();
byte[] x2 =str2[i].getBytes();
byte[] x3 =fengge.getBytes();
shuchu.write(x1);
shuchu.write(x3);
}
if(x%y!=0 && y!=0 ) {余数不为零,除数不为零
result = x / y;
System.out.println("("+(i+1)+") " + x + " / " + y);
str1[i]="("+(i+1)+") " + x + " / " + y;
str2[i]="("+(i+1)+") " + x + " / " + y + " = " + result + "..." + (x%y);
byte[] x1 =str1[i].getBytes();
byte[] x2 =str2[i].getBytes();
byte[] x3 =fengge.getBytes();
shuchu.write(x1);
shuchu.write(x3);
}
3. 代码规范
1谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。
2.[强制]异常不要用来做流程控制,条件控制。
3.[强制] catch时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。
4.[强制]不能使用过时的类和方法。
5.[推荐]不同逻辑、不同语义、不同业务的代码之间插入一个空行分割开来以提升可读性。
6.右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
7.左大括号前不换行。
8.左大括号后换行。
五、测试
1.输入0 预期结果:输入不能为零 结果:符合预期
2.输入-1 预期结果:输入不能小于零 结果:符合预期
3.输入101 预期结果:输入不能大于100 结果符合预期
六、总结
这次代码虽然花了不少时间但是大多时候是在做无用功,效率低下;以及编程能力与方法和大一刚进来好不了多少,这次代码也没有全部完成,任务一二完成了输出,但是有很多bug不知道如何解决。以及对于完成代码的方法有些都是一头雾水不知道如何下手,写出的代码又臭又长,没有规范,写完任务一不知道如何在任务一的基础上写二,而且对于异常处理不知道如何处理。这次作业体现了我编程的薄弱,要多加练习,查资料,对于我这次作业我并不满意。我要再多打代码,希望以后的作业能更好地完成。