第一次作业

作业一

一、预估与实际

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不知道如何解决。以及对于完成代码的方法有些都是一头雾水不知道如何下手,写出的代码又臭又长,没有规范,写完任务一不知道如何在任务一的基础上写二,而且对于异常处理不知道如何处理。这次作业体现了我编程的薄弱,要多加练习,查资料,对于我这次作业我并不满意。我要再多打代码,希望以后的作业能更好地完成。

原文地址:https://www.cnblogs.com/wwq123/p/9630942.html