第一次作业——MathExam285
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的更多相关文章
- C 语言学习 第一次作业总结
第一次的作业是冯老师布置的练习题,需要在pta平台上完成.我这边看不到结果,但是透过冯老师给出的截图,同学们都还是认真的去做的.同时,我这边也布置了一个持续 3 周的作业:熟悉 git 的使用.因为后 ...
- 耿丹CS16-2班第一次作业汇总
第一次作业统计完成. 注:1.作业顺序:取最早交作业的前3名,依次拿5,2,1分,前提是作业质量较高,否则轮至下一名同学得分,其余同学得0分:2.作业情况:满10分,空一题扣2分,心得写得好的有额外加 ...
- 软件工程(QLGY2015)第一次作业小结(含成绩)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 Github项目提交 github的代码提交,大部分人都只是提交了单个文件,存在几个问题 请提交完整的项目文件到github 问题:为什 ...
- 2015级软工实践k班第一次作业-准备
第一次作业-准备······ 几篇文章阅读下来发现一个事实,还是要有明确的目标,清楚自己需要做什么最为重要.然后根据目标确定需要为之所做的准备工作,考研也好,工作也罢,都是服务于自己的目标. 问题答应 ...
- java第一次作业0
lsl321 java第一次作业 #1. 本章学习总结 你对于本章知识的学习总结 本章我们学习了各种java相关文件的使用,以及码云,博客,pat等程序辅助软件,这些对于我们专业的学习有非常大的帮助, ...
- 集大1513 & 1514班 软件工程第一次作业评分与点评
谢谢大多数同学按时完成了作业,同学态度都比较端正,没有为了完成作业或者讨好老师而说一些假话空话. 很多同学选择CS之前并没有从兴趣或者擅长出发.这是一个普遍的现象,十年前我们是这样,十年后的孩子们还是 ...
- OO第一次作业总结
OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...
- # C语言程序设计第一次作业1234
---恢复内容开始--- C语言程序设计第一次作业 1.求圆面积和周长 输入圆的半径,计算圆的周长和面积 (1)流程图 (2)测试数据及运行结果 测试数据r=3 运行结果 2.判断闰年 输入一个四位年 ...
- 构建之法助教园地第一次作业--点评<西北师范大学|李晓婷>
一 博客点评 第一次作业--准备篇:https://www.cnblogs.com/Mookiepiece/p/10464606.html#4192515 点评内容: 首先,你对电脑很感兴趣,兴趣就是 ...
随机推荐
- P2467 [SDOI2010]地精部落
题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其中Hi是1到N之间的正整数 ...
- 最简单的ASP.Net连接查询Oracle,输出查询数据到表格中
VS2012中新建Windows窗体应用程序.Oracle中建测试数据表Test.(此处需要环境已配好情况下进行操作) 用到的数据表 向Windows窗体应用程序,设计界面托一个按钮和一个数据表格视图 ...
- ios学习路线—Objective-C(新特性)
1.方法顺序无关 Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的 ...
- 编写Dockerfiles
指令 docker build通过Dockerfile制作镜像 docker build [PATH] [-f Dockerfile] 其中PATH不写,默认执行指令的当前目录,不要用 /,这样将导致 ...
- LaTeX宏包TikZ绘图示例——Go语言起源图
本例所绘图形选自<Go语言程序设计>(作者:Alan A. A. Donovan与Brian W. Kernighan)一书的前言部分. 完整代码 \documentclass{art ...
- es6 用generator进行异步方法同步
可以把以下代码复制到html文件中用chrome执行,或者用nodejs执行 function async1(chain) { setTimeout(function(){ chain.next('a ...
- WPF的单位 屏幕 分辨率
原文:WPF的单位 屏幕 分辨率 WPF程序中的单位是与设备无关的单位,每个单位是1/96英寸,如果电脑的DPI设置为96(每个英寸96个像素),那么此时每个WPF单位对应一个像素,不过如果电脑的DP ...
- 洛咕P3250 [HNOI2016]网络 整体二分
这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...
- cogs1538 [AHOI2005]LANE 航线规划
套路题+裸题 首先肯定离线,倒过来处理,删边->加边 连边的时候,如果不连通就连,否则在这两个点的链上打个覆盖标记,查询的时候输出没被覆盖的路径条数 #include<cstdio> ...
- CS100.1x-lab0_student
这是CS100.1x第一个提交的作业,是给我们测试用的.相关ipynb文件见我github.本来没什么好说的.我在这里简单讲一下,后面会更详细的讲解.主要分成5个部分. Part 1: Test Sp ...