当前位置: 移动技术网 > IT编程>开发语言>Java > 小学生快乐寒暑假

小学生快乐寒暑假

2018年09月11日  | 移动技术网IT编程  | 我要评论

一个大气又可爱的算术题

一、预估与实际

psp2.1 personal software process stages 预估耗时(分钟) 实际耗时(分钟)
planning 计划 500 750
• estimate • 估计这个任务需要多少时间 500 750
development 开发 400 480
• analysis • 需求分析 (包括学习新技术) 50 50
• design spec • 生成设计文档 10 15
• design review • 设计复审 10 10
• coding standard • 代码规范 (为目前的开发制定合适的规范) 30 50
• design • 具体设计 30 30
• coding • 具体编码 240 350
• code review • 代码复审 20 20
• test • 测试(自我测试,修改代码,提交修改) 30 45
reporting 报告 30 50
• test repor • 测试报告 20 20
• size measurement • 计算工作量 10 10
• postmortem & process improvement plan • 事后总结, 并提出过程改进计划 30 30
合计 750

二、需求分析

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

  • 特点1
  • 小学一年级的数学题只有加减法运算。
  • 特点2
  • 相减不会产生负数。
  • 特点3
  • 小学二年级的数学题为四则运算。
  • 特点4
  • 除法商不能有小数,并且除法的除数不能为0。

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

  • 通过命令行输入数据。
  • 程序需要判断年级,从而随机出不同的题目。
  • 生成的式子的符号也需要判断,如果不符合,需要重新输入,因为首次输入为命令行输入,所以需要加入写入数据的代码。
  • 将生成的式子写入到.txt文本中,最后从cmd中打开文本。
  • 使用的数字小于100

三、设计

1. 设计思路

说明你如何设计这个程序

  • 需要判断是否存在txt文件,如果不存在需要自动生成一个。
  • 生成不同年级的题目需要判断语句去判断。
  • 根据年级的不同随机生成不同的符号。
  • 判断式子是否合理。
  • 合理,计算,写入txt文档中。
  • 如果需要继续出题用循环判断。

2. 实现方案

写出具体实现的步骤

  • 准备工作:先在github上创建仓库,克隆到本地.
  • 在本地仓库新建psp6343文件夹,创建源文件mathexam6343.java
  • 判断输入条件是否正确,运用while循环加if语句的判断。
  • 用数组储存产生的随机数,并且写入到txt文本中。
  • 技术关键点:数字的判断,符号的判断,式子是否成立,数据写入txt中,字符的转换。

四、编码

  • 生成随机数 math.random()
  • if语句判断年级,符号,题目规范
  • io流写入

1. 调试日志

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

  • 一年级减法数学计算,有答案为负数的。
    解决方案:判断第一个传入的数是否大于第二个传入的数,如果小于,符号由“-”变为“+”。

  • 输入年级时,如果输入1或者2以外的数,程序不会运行。
    解决方案:用while循环判断输入是否合理,如果不对,重新输入。

  • 二年级除法计算,除数生成了0.
    解决方案:在生成随机数时+1.

  • 输入题目个数时,输入负数,会报错。
    解决方案:判断是否大于0且个数不超过9999.否则重新输入。

2. 关键代码

    if(n[1]==1) {                               //判断年级
        for(int i =1;i<=n[0];i++) {             //通过for循环产生随机数,并且将随机数写入数组
        int a=(int)(math.random()*100+1);   
        as[i] = a;                                                  
        int c=(int)(math.random()*100+1);
        {
            if(c%2==1) {                        //判断符号
                cs[i] = '-';
            }
            else  {
                cs[i] = '+';
                }
        }                       
        int b=(int)(math.random()*100+1);       //b值
        bs[i] = b;
        
        if(c%2==1 && a<b) {
            int answer = a+b;
            cs[i]='+';
            ds[i]=(char) answer;
        }
        
        else if(c%2==1 ) {
            int answer = a-b;
            ds[i] = (char) answer;

        }
        else {
            int answer =a+b;                    //判断式子是否
            ds[i] = (char) answer;

        }
    }
    }   
    for(int i=1;i<=n[0];i++) {                      //通过for循环把数组里的数字写入txt中
        try {
            bw.write(string.valueof("("+i+")"));
            bw.write(string.valueof(as[i]));    
            bw.write(string.valueof(cs[i]));    
            bw.write(string.valueof(bs[i]));
            bw.newline();
        } catch (ioexception e) {                   //捕获异常
            e.printstacktrace();
        }           
    }

3. 代码规范

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

  • 类名统一,txt文件名统一。
  • 类名首字母大写。
  • 备注代码功能。
  • 代码缩进对齐。- 左小括号和字符之间不出现空格。
  • 循环嵌套换行,使代码对应。

五、测试

测试编号 具体输入 预期结果 实际结果
1 10 1 输出10题一年级题目 符合预期
2 -5 1 提示重新输入一个数 符合预期
3 -5 -1 提示重新输入两个数 符合预期
4 5 - 1 提示重新输入一个数 符合预期
5 -5 程序报错,停止运行 符合预期

六、总结

请总结过程中的教训和经验,思考

  • 是否使用了“软件开发的基本策略:分而治之”,是否需要用重构。
    使用了“软件开发的基本策略:分而治之”,没有使用重构。
  • “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
    适当采用。
  • 从开始计划到写完代码需要很长的一段时间。在编写过程中,需要用到很多基础的知识,但是由于知识运用的不熟练需要花去更长的时间去写,所以
    基础学习很重要。在计划时候想好思路,会节省很多的时间,并且会减少后面添加代码带来的bug。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网