第一份作业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输出正常

六、总结

  • 太难了,重在有耐心,会敲代码,但是已经玩的差不多了,无从下手可以说,没有舍友帮助我自己是很难完成这份作业的。
posted @ 2018-09-11 20:44  为学习疯狂  阅读(181)  评论(1编辑  收藏  举报