我再也不敢啥也不想就先写代码了01

时间:2022-10-08 00:42:36

燃烧我的脑细胞

一、预估与实际

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

二、需求分析

我通过百度的方式了解到,小学一年级数学有如下的几个特点:

  • 特点1
  • 一年级上:主要还是在打计算的基础,包括20以内的进位加法,和20以内的减法,还不涉及退位减法,为了巩固好基础,也加强了连加连减的运算
  • 一年级下:主要是20以上的加减的计算,包括进位和退位之间的复杂计算
  • 二年级:主要学习表内乘法和除法,万以内数的读法和写法,万以内数的加减法(不进位、退位)含有加、减、乘、除的两步计算题和括号的认识,也就是简单的两步计算的四则混合运算的法则.简单的两步计算的应用题.

经过分析,我认为,这个程序应当:

  • 使用的数字小于100
  • 不能使用分数

三、设计

1. 设计思路

  • 一年级二年级放一起做写的时候再想怎么分开(结果费了很长时间才做好)

2. 实现方案

写出具体实现的步骤

  • 准备工作:先在Github上创建仓库,克隆到本地.
  • 设计大纲:设置整体运算,分类输出
  • 技术关键:实现根据年级进行输出

四、编码

是编码的过程中很不小心,很多次出现bug,一个字母一个字母的检查还是发现不了错误,最后没办法删了这个片段重新打,然后就过了,到最后也没发现错误在哪,以至于有种电脑坏了的感觉。而且忘记分类了,代码已经写出来了,这个样子写其实不太好分类,绞尽脑汁,改了不知道多少次才改好==。

1. 调试日志

记录编码调试的日志,请记录下开发过程中的 debug 历程

  • emmmm....第一次没分类跑回去改
  • 第二次,输出不全,这个更麻烦,跑回去,重新打了几遍,也没怎么改(没印象有改动,因为看了代码感觉没啥问题),就过了

    2. 关键代码

请展示一段程序的关键代码,并解释代码的作用
···
private static String[][] buildQuestion(int count, int grade){

    if(count < 0){
        count = 1;
    }/*修改题目数量*/
    if(grade < 1){
        grade = 1;
    }/*修改年级数量*/
    if(grade==1) {
        grade=1;
    }

    int limited = grade * 20;
    Random random = new Random();
    String[][]  RT= new String[count][4];
    for (String[] arr : RT) {
        
        int wohenkun = random.nextInt(limited);
        
        int danshimeizuohao = random.nextInt(limited);
        
        if(grade==1) {/*分类*/
            int woxiangshuijiao = random.nextInt(2);
            if( woxiangshuijiao == 0 ) {
            arr[1] = " + ";
            arr[3] = String.valueOf(wohenkun + danshimeizuohao);    
            }/*加*/
            else if(woxiangshuijiao==1 ) {
                arr[1] = " - ";
                arr[3] = String.valueOf(wohenkun - danshimeizuohao);
                
            /*减*/
            }}
        if(grade==2) {
            int woxiangshuijiao = random.nextInt(2);
            
             if(woxiangshuijiao==1) {arr[1] = " × ";
            arr[3] = String.valueOf(wohenkun * danshimeizuohao);/*乘*/
            }       
                
            
            
             else {
                 arr[1] = " ÷ ";
                    while(danshimeizuohao == 0){
                        danshimeizuohao = random.nextInt(limited);
                    }
                    int remainder = (wohenkun%danshimeizuohao);/*余数*/
                    if(remainder == 0){
                        arr[3] = String.valueOf(wohenkun/danshimeizuohao);
                    }else{
                        arr[3] = String.valueOf(wohenkun/danshimeizuohao) + "..." + String.valueOf(remainder);/*除*/

                    } 
             }
    }

          arr[0] = String.valueOf(wohenkun);
            arr[2] = String.valueOf(danshimeizuohao);
    }
    return RT;
    
}

···

3. 代码规范

请给出本次实验使用的代码规范:

  • 代码中的命名均不能以下划线或美元符号开始,也不能一下划线或美元符号结束。
    -第六条:任何二目、三木运算符的左右两边都需要加一个空格。 说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。

并人工检查代码是否符合规范

五、测试

请思考并记录你认为必要的测试点,并记录测试用例与测试结果
-测试点:一年级与二年级的题目是否分开
输入:5 1 输出:

(1) 14 - 2 =

(2) 6 + 7 =

(3) 11 + 17 =

(4) 3 + 16 =

(5) 6 + 17 =
------------------标准答案------------------

(1) 14 - 2 = 12

(2) 6 + 7 = 13

(3) 11 + 17 = 28

(4) 3 + 16 = 19

(5) 6 + 17 = 23
211506368 霍金池 2018年 09月 12日 04:25

六、总结

请总结过程中的教训和经验,思考
自己要学习的还很多,在编程的时候明显感觉到自己能力的不足,很多知识不会用甚至不知道,而且思路比较僵硬,有些解决方案要很久才能想出来,还有粗心的坏习惯,总是这里少写一点,那里少写一点。
经验,下次,一定一定一定要想好了在写T-T,改代码是真的伤脑子。