MathExam285

一、预估与实际

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

二、需求分析

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

  • 特点1
  • 知识结构分为数与代数、空间与图形、统计与概率。

  • 特点2
  • 数与代数中使用的数字仅限于10以内的加减法。

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

  • 使用的数字小于10,但是计算出的答案不在此范围之内。
  • 四则运算只考虑其中的加法和减法。

三、设计

1. 设计思路

实验一:

这个程序在经过思考之后,我分为三个部分:

  • 文件的输入和输出:在程序中由于最终的目的是创建一个out.txt的文件并向里面写入题目和答案。所以我打算创建一个输入方法和输出方法用来随时进行调用。
  • 题目的产生:在读取用户键入的题目的数量后,我需要单独创建一个方法(gradeOne)用来随机产生一年级的数学题目。
  • 用户的输入:用户的输入可能不符合我们预期的猜想,所以要对用户的输入进行错误处理,防止程序崩溃。

实验二:

这是在实验一的基础上新增功能,所以我在考虑之后分为两步:

  • 新增2个参数的命令行输入并不影响实验1的命令行执行方式:通过判断args数组的长度可以推断出输入了几个参数。
  • 在算法中新增四则运算中的乘法和除法

2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地。

实验一:

  • 技术关键点:文件的输入和输出在转换时要转换成机器能识别的语言,在随机产生的题目中计算出的答案如何保存并在题目之后再一次写入到out.txt中,错误处理是否考虑的完全。

实验二:

  • 技术关键点:如何编写代码才能实现程序在输入1个参数和2个参数的时候都能运行。

四、编码

1. 调试日志

实验一:

  • 首先我就是先去尝试着使用java创建一个out.txt的文件,并向其中写入任意数据就行试验,但在一开始我就遇到了在字符串中使用\r不能换行的问题。后面经过网上查阅资料后更正为\r\n。
  • 之后我开始研究如何产生一年级的数学题目,然后发现我自己对随机数产生的方法印象并不是很深刻,在我查阅了随机数的产生方法之后,这个问题也迎刃而解。
  • 现在我开始进行错误处理,我考虑了用户可能输入的值超过int的范围,所以使用了判断数据位数的方法来防止。其他的还有值可能是负数、字符串等也考虑在其中并编写了相应的代码进行解决。
  • 我少考虑了一种错误处理,也就是用户可能键入00000000000000001这种数值,这个问题会导致程序输出“输入的正整数数太大”并停止运行,所以我使用了replaceFirst的方法来处理。

实验二:

  • 在经历过N次尝试和上网寻找资料后,里面的main函数中的(String[] args)的含义才写出输入参数个数不同的运行方法。
  • 在进行除法的编码时发现,居然还需要保留余数!然后我就重写了gradeTwo()中的switch代码,使得程序满足用户的要求。

2. 关键代码

  • args[0]=args[0].replaceFirst("^0*", "");//用来去掉数字面前的0

  • out(str){
  • File file = new File("out.txt");//定义一个文件对象并令其指向一个文件位置
  • file.createNewFile();//在指定位置创建一个文件
  • BufferedWriter br = new BufferedWriter(new FileWriter(file,true));//建立一个缓冲对象,把文件内容转换成计算机能识别的对象
  • br.write(str+"\r\n");
  • br.flush();
  • br.close();
  • }

    3. 代码规范

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

  • 第一条:驼峰式命名风格
  • 第二条:不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
  • 第三条:大括号的使用约定。如果是大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则:左大括号前不换行。左大括号后换行。右大括号前换行。右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
  • 第四条:单行字符数限制不超过120个
  • 第五条:没有必要增加若干空格来是耨一行的字符与上一行对应位置的字符对齐。
  • 第六条:在一个switch块内,每一个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使空代码。
  • 第七条:在 if/else/for/while/do 语句中必须使用大括号。
  • 第八条:避免采用取反逻辑运算符。

五、测试

实验一:

  • 输入题目的数量极大:java MathExam285 10000000000000000000,输出:输入的正整数数太大。
  • 输入题目的值为非数字的字符串:java MathExam285 asdasd,输出:只能输入正整数。
  • 输入题目的值为负数:java MathExam285 -3,输出:只能输入正整数。
  • 正常输入:java MathExam285 5,输出:(out.txt文件中写入了题库和答案)

实验二:

  • 输入题目的数量极大:java MathExam285 10000000000000000000 1 ,输出:输入的正整数数太大。
  • 输入题目的值为非数字的字符串:java MathExam285 asdasd 2,输出:只能输入正整数。
  • 输入题目的值为负数:java MathExam285 -3 1,输出:只能输入正整数。
  • 正常输入:java MathExam285 5 1,输出:(out.txt文件中写入了题库和答案)
  • 正常输入:java MathExam285 5 2,输出:(out.txt文件中写入了题库和答案)
  • 正常输入:java MathExam285 5,输出:(out.txt文件中写入了题库和答案)

六、总结

  通过这一次的代码编写,我发现在编写代码之前的准备工作是极其重要的。准备工作如果有做好,那么接下来的工作就起到了事半功倍的作用,相反,如果没有去做准备工作而是直接上手写代码,那么将会一头雾水。另外,代码的排版也是我感悟良多,一个优秀的规范代码无论对于他人还是自己都是益处多多的,代码上面的注释还可以使他人在阅读的时候便于理解而且自己在回顾的时候也能起到作用。
  代码重构也是编程的一大关键,重构后的代码看起来相当清爽并且简单易懂,不过这一点我做的还不够好,接下来还需要努力。

第一次作业——MathExam285的更多相关文章

  1. C 语言学习 第一次作业总结

    第一次的作业是冯老师布置的练习题,需要在pta平台上完成.我这边看不到结果,但是透过冯老师给出的截图,同学们都还是认真的去做的.同时,我这边也布置了一个持续 3 周的作业:熟悉 git 的使用.因为后 ...

  2. 耿丹CS16-2班第一次作业汇总

    第一次作业统计完成. 注:1.作业顺序:取最早交作业的前3名,依次拿5,2,1分,前提是作业质量较高,否则轮至下一名同学得分,其余同学得0分:2.作业情况:满10分,空一题扣2分,心得写得好的有额外加 ...

  3. 软件工程(QLGY2015)第一次作业小结(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 Github项目提交 github的代码提交,大部分人都只是提交了单个文件,存在几个问题 请提交完整的项目文件到github 问题:为什 ...

  4. 2015级软工实践k班第一次作业-准备

    第一次作业-准备······ 几篇文章阅读下来发现一个事实,还是要有明确的目标,清楚自己需要做什么最为重要.然后根据目标确定需要为之所做的准备工作,考研也好,工作也罢,都是服务于自己的目标. 问题答应 ...

  5. java第一次作业0

    lsl321 java第一次作业 #1. 本章学习总结 你对于本章知识的学习总结 本章我们学习了各种java相关文件的使用,以及码云,博客,pat等程序辅助软件,这些对于我们专业的学习有非常大的帮助, ...

  6. 集大1513 & 1514班 软件工程第一次作业评分与点评

    谢谢大多数同学按时完成了作业,同学态度都比较端正,没有为了完成作业或者讨好老师而说一些假话空话. 很多同学选择CS之前并没有从兴趣或者擅长出发.这是一个普遍的现象,十年前我们是这样,十年后的孩子们还是 ...

  7. OO第一次作业总结

    OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...

  8. # C语言程序设计第一次作业1234

    ---恢复内容开始--- C语言程序设计第一次作业 1.求圆面积和周长 输入圆的半径,计算圆的周长和面积 (1)流程图 (2)测试数据及运行结果 测试数据r=3 运行结果 2.判断闰年 输入一个四位年 ...

  9. 构建之法助教园地第一次作业--点评<西北师范大学|李晓婷>

    一 博客点评 第一次作业--准备篇:https://www.cnblogs.com/Mookiepiece/p/10464606.html#4192515 点评内容: 首先,你对电脑很感兴趣,兴趣就是 ...

随机推荐

  1. CCF认证201712-1最小差值

    问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值. 输入格式 输入第一行包含一个整数n. 第二行包含n个正整数,相邻整数之间使用一个空格分隔. 输出格式 输出一个 ...

  2. BUAA_OO第一单元总结性博客作业——表达式求导

    一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...

  3. ubuntu终端下快捷键之--字体放大缩小

    1.快捷键 Ctrl  -   字体缩小 Ctrl  + (有的电脑是“Ctrl Shift +” 三个按键同时按下)字体放大 Ctrl 0  恢复默认字体 2.终端设置默认字体 在终端下,点击右键- ...

  4. C语言之随机数函数( rand() )的使用方法

    文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明. 在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下 ...

  5. 【转】CSDN离线网页html文件自动跳转

    问题: 最近使用OneNote2016剪辑csdn的文章时,发现一些公式/文本框不能被正确识别,所以离线保存网页的html文件. 但是每次打开html文件,都会自动跳转的CSDN主页,即使断网,也会自 ...

  6. MIPS架构——汇编代码转机器代码编译器 Matlab GUI

    MIPS架构下的MCU,指令集包含R-Type.I-Type.J-Type三种,在数电课程设计时为了给MCU编写指令集,需要将汇编语言转化成机器代码,这里分享一下自己写的Matlab 的 GUI. 主 ...

  7. # 课下测试补交(ch01)20155337

    课下测试补交(ch01) 1.Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比.(B) A .正确 B .错误 解析:Amdahl定律,该定律的主要思想是,当我们对 ...

  8. window下查杀占用端口的进程

    一. 查找占用的端口进程号,比如8080 C:> netstat –ano|findstr 8080 C:\Users\chry>netstat -ano | findstr 8080 T ...

  9. Codeforces Round #511 Div.1 A Div.2 C

    嗯切一题走人很开心. gzy-50分比我还惨. 题意:有n个数,去掉尽量少的数使得剩下数的gcd变大. 首先把这n个数都除以gcd,就变成了去掉尽量少的数使得gcd不等于1. 可以枚举一个质数,然后统 ...

  10. 日常的例子说明 throttle 和 debounce 的区别

    不小心接触到 throttle 和 debounce,按捺不住猎奇的心理,找这两个函数的资料. 然而百度到的各种对他们的理解,我去啊. 艰难地搞明白他们是干嘛的之后,忍不住举个例子说说自己的理解,希望 ...