第一次代码作业

时间:2021-02-05 16:37:46

一、预估与实际

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

二、需求分析

  • 特点1
  • 经过分析,我认为,这个程序应当:
    • 一年级使用20以内的数字进行加减法,并且结果需要小于等于20大于等于0。
    • 二年级使用乘法表上的乘法作为题目,除法则是100以内的数除以一个个位数,并且答案也应该为个位数。

三、设计

1. 设计思路

说明你如何设计这个程序

  • 这个程序需要有三个函数,一个一年级函数,一个二年级函数,一个输出文件函数。
  • 使用主函数调用一年级函数或二年级函数,函数计算完成之后调用输出文件函数进行输出
  • 算法的关键是
  • 1.使用数组保存随机出的数值,符号,答案
  • 2.一年级函数中,需要判断两数相加或相减是否小于等于20大于等于0,如果不是使用 i--并使用continue结束当前循环,使当前数值作废。
  • 3.二年级函数中,除法需要将答案作为被除的数,第一个随机数值或第二个随机数值作为除数,以保证符合需求,并减少时间浪费。

2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地...
  • 技术关键点:输入数值验证,使用while无限循环,如果数值正确使用break脱离循环。 使用二维数组保存随机出的数值。

四、编码

  • 首先随机三个数值,a,b,m,m为符号限制随机数只能为1,2,1代表加法2代表减法,在二年级则是乘除。
  • 一年级先随机abm,然后根据m的数决定加减,计算出ans答案,然后验证ans是否小于而是,如果不小于20则continue,将此次数据作废,然后将a b m ans存入一个二维数组,二维数组第一个数代表题目,第第二个数0 2代表运算的两个数,1代表符合,3代表答案。
  • 二年级先随机abm,如果m为1,使用乘法,将a m b ans依次存入二维数组中,如果m为2,则是除法此时将ans 与 a作为运算数值,b作为答案。
  • 输出的时候先将二维数组的0 1 2 输出出去,作为题目,然后将0 1 2 3 输出,作为答案。

1. 调试日志

  • 第一次调试,发现所有结果都是0,发现是放在for循环数组的第一个数写成n了。
  • 第二次调试,发现一年级ans不符合标准,使用if,剔除不符合标准的数值
  • 第三次调试,发现二年级ans不符合标准,除法使用ans 与 a作为运算数值
  • 第四次调试,发现没有处理异常的能力,是用while循环,检测输入数值是否在规定数值内,如果符合使用break跳出循环,如果不符合则继续循环。

2. 关键代码

for(int i = 0; i < n; i++) {
            int a = (int) (Math.random()*20);
            int b = (int) (Math.random()*20);
            int ans = 0;
            int mark = (int) (Math.random()*2+1);
            String strMark = null;
            if(mark == 1) {
                ans = a+b; 
                strMark = "+";
            }else {
                ans = a-b;
                strMark = "-";
            }
            if(ans >= 20 || ans < 0) {
                i--;
                continue;
            }
                
            str[i][0] = String.valueOf(a);
            str[i][1] = strMark;
            str[i][2] = String.valueOf(b);
            str[i][3] = String.valueOf(ans);
        }
  • 将答案大于20的数值剔除掉,将符合需求的数值存入二维数组中

3. 代码规范

  • 第一条:不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
  • 第二条:大括号的使用约定。如果是大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则:左大括号前不换行。左大括号后换行。右大括号前换行。右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
  • 第三条:左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。
  • 第四条:在 if/else/for/while/do 语句中必须使用大括号。
  • 第五条:任何二目、三木运算符的左右两边都需要加一个空格。
  • 第六条:单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。运算符与下文一起换行。方法调用的点符号与下文一起换行。方法调用时,多个参数,需要换行时,在逗号后进行。

五、测试

  • 需要测试如果输入数值不是规定数值,程序是否能处理这种情况

  • 输入200 输出:您输入的不是小于100大于0的整数,请重新输入
  • 输入-1 输出:您输入的不是小于100大于0的整数,请重新输入
  • 输入1.1 输出:您输入的不是小于100大于0的整数,请重新输入
  • 输入-2.1 输出:您输入的不是小于100大于0的整数,请重新输入
  • 输入0 输出:您输入的不是小于100大于0的整数,请重新输入
  • 输入10 3 输出:您输入的不是1或2,请重新输入
  • 输入10 -1 输出:您输入的不是1或2,请重新输入
  • 输入10 1.1 输出:您输入的不是1或2,请重新输入
  • 输入10 0 输出:您输入的不是1或2,请重新输入
  • 输入10 -2.6 输出:您输入的不是1或2,请重新输入
  • 输入6 1输出正常

六、总结

  • 本次作业先将问题简化,先在主函数里写出随机一个加减法的函数,然后写出一个二维数组进行储存,然后写出一个输出函数。然后将一年级函数与输出函数从主函数中分开,分为单独的函数,然后再写一个二年级函数,将一年级函数复制过去,在判断符号处进行修改。然后测试程序是否能够正常运行。测试成功后,在处理异常输入数据。