第一份作业1
大气的第一次作业
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
• Estimate | • 估计这个任务需要多少时间 | 20 | 30 |
Development | 开发 | 273 | 210 |
• Analysis | • 需求分析 (包括学习新技术) | 15 | 15 |
• Design Spec | • 生成设计文档 | 60 | 80 |
• Design Review | • 设计复审 | 33 | 15 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 10 |
• Design | • 具体设计 | 30 | 20 |
• Coding | • 具体编码 | 60 | 30 |
• Code Review | • 代码复审 | 15 | 25 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 15 |
Reporting | 报告 | 200 | 210 |
• Test Repor | • 测试报告 | 26 | 30 |
• Size Measurement | • 计算工作量 | 22 | 26 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 152 | 154 |
合计 | 450 |
二、需求分析
我通过搜索引擎查找资料的方式了解到,小学一年级数学有如下的几个特点:
- 加减法大小在0-99区间内
- 无负数运算
- 无分数运算
我通过搜索引擎查找资料的方式了解到,小学二年级数学有如下的几个特点:
- 表内乘法
- 表内除法
经过分析,我认为,这个程序应当:
- 不可输入除数字外其他字符
- 注意辨别命令行参数个数
- 所求结果在0-100范围内
三、设计
1. 设计思路
说明你如何设计这个程序
比如:
- 这个程序有x个类,x个函数,函数之间的调用关系是怎样的?
- 关键函数的流程图是怎样的?
- 算法的关键的关键是什么?
- 这个程序有1个类,4个函数
- 首先通过命令行接收参数
- 然后通过函数来生成题目
- 最后生成题目与答案文件
- 关键函数是题目的生成函数认真构思
2. 实现方案
写出具体实现的步骤
比如:
- 准备工作:先在Github上创建仓库,克隆到本地...
- 技术关键点:梳理一下设计思路,可能遇到哪些技术关键点
- ...
四、编码
查到math.random()是生成随机数的方法
第二位随机数根据第一位的值限制范围,即可以不会发生差值为负的情况
将字符串数组转换成byte,再用FileOutputStream的write()方法来写入文件。
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
- cmd输入文件的未换行,经过查询知道cmd换行符/r/n
- 想要循环进程从头开始,问题在于没给再一次输入参数,所以参数一直保持不变,解决方法是加一个控制台输入。
- 修改了输入“abcd”字符的结果
2. 关键代码
for(i=0;i<n[0];i++) {
int a=(int)(Math.random()10+1);
int b=(int)(Math.random()10+1); // 保证除数不为0
int c=(int)(Math.random()2);
if(c%2==0) {
System.out.println("("+(i+1)+")"+a+"x"+b+"="); // 乘法运算
qs = new StringBuffer("("+(i+1)+")"+a+"x"+b+"=");
rs = new StringBuffer(" "+(ab));
as[i]=("("+(i+1)+")"+a+"x"+b+"=");
qs.append(rs);
cs[i]=qs.toString();
}
-
乘法算法
for(;😉 {
int flag=4;
int[] n =new int [args.length] ;
n[0]=Integer.parseInt(args[0]);
n[1]=Integer.parseInt(args[1]);
if(args[0].length()>5 && Integer.parseInt(args[0])>100) {
System.out.print(" 输入的题目数太大"); // 限制题数过大
flag=0;
}
if(Integer.parseInt(args[1])>2) {
System.out.print(" 输入的年级数太大"); // 限制年级数过大
flag=1;
}
if(n[0]<=0 && !args[0].matches("\d")) {
System.out.print(" 输入的题目数不对,应为正整数"); // 限制题数为正整数
flag=2;
}
if(n[1]<=0 && !args[1].matches("\d")) {
System.out.print(" 输入的年级数不对,应为正整数"); // 限制年级数为正整数
flag=3;
}
if(flag!=4) {
System.out.println("\n"+"请输入题目数与年级"); args[0]=sc.next();args[1]=sc.next();continue;
}// 如果输入的两个参数不对 则继续输入 直至正确为止 -
控制输入参数的规范
3. 代码规范
请给出本次实验使用的代码规范:
- 第一条注释的双斜线与注释内容之间有且仅有一个空格
- 第二条左小括号和字符之间不出现空格;同样的,右小括号和字符之间也不出现空格
- 第三条避免类似的名字,或者仅仅是大小写不同的名字
- 第四条左大括号后换行
- 第五条注释的双斜线与注释内容之间有且仅有一个空格
并人工检查代码是否符合规范
五、测试
- 输入 10 0 输出:输入的年级数不对,应为正整数
请输入题目数与年级 - 输入 -10 1 输出:输入的题目数不对,应为正整数
请输入题目数与年级 - 输入10 -1 输出:输入的年级数不对,应为正整数
请输入题目数与年级 - 输入10 3 输出:输入的年级数太大
请输入题目数与年级 - 输入-10 -1 输出:输入的年级数太大输入的题目数不对,应为正整数 输入的年级数不对,应为正整数
请输入题目数与年级 - 输入10 1输出正常
- 输入10 2输出正常
六、总结
- 太难了,重在有耐心,会敲代码,但是已经玩的差不多了,无从下手可以说,没有舍友帮助我自己是很难完成这份作业的。