第一次作业——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 点评内容: 首先,你对电脑很感兴趣,兴趣就是 ...
随机推荐
- Splay普及版
辣么,我要介绍我自学的\(Splay\)了,虽然跟大佬们讲得会有些重复,但是自认为把一些玄妙的东西点出来了\(qwq\) \(0x01\) 引言 首先,我并没觉得\(Splay\)有多难--代码长的原 ...
- 开源 免费 java CMS - FreeCMS1.9 全文检索
项目地址:http://code.google.com/p/freecms/ 全文检索 从FreeCMS 1.7開始支持 仅仅有创建过索引的对象才干被lucene类标签查询到. 信息类数据会在信息更新 ...
- 【CSS3】特殊的属性归纳(一)
CSS3手册地址速查表 -webkit- 最终要用兼容性写法 (一)-webkit-tap-highlight-color (mobile移动设备私有属性) 案列: 问题:遇到a链接和butto ...
- 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn
本课主题 数据中 Independent 变量和 Dependent 变量 Python 数据预处理的三大神器:Numpy.Pandas.Matplotlib Scikit-Learn 的机器学习实战 ...
- DQL-联合查询
一.含义union:合并.联合,将多次查询结果合并成一个结果二.语法查询语句1union [all]查询语句2union [all]... 三.意义1.将一条比较复杂的查询语句拆分成多条语句2.适用于 ...
- jQuery----(类似抽奖转盘)高亮显示
效果如图: 原图 鼠标进入后开始变化图 实现需 ...
- Python的scrapy之爬取6毛小说网的圣墟
闲来无事想看个小说,打算下载到电脑上看,找了半天,没找到可以下载的网站,于是就想自己爬取一下小说内容并保存到本地 圣墟 第一章 沙漠中的彼岸花 - 辰东 - 6毛小说网 http://www.6ma ...
- 分子量 (Molar Mass,ACM/ICPC Seoul 2005,UVa1586)
习题 3-3 分子量 (Molar Mass,ACM/ICPC Seoul 2005,UVa1586) 给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分别为C,H,O,N, ...
- Ajax第一天——入门与基本概念
什么是Ajax Ajax被认为是(Asynchronous JavaScript and XML的缩写).异步的js和xml 异步和同步:同步->类似打电话,接完一个再接下一个:异步:-> ...
- 2015306 白皎 《网络攻防》Exp1 进阶
2015306 白皎 <网络攻防>Exp1 进阶 Task1 64位shellcode的编写及注入 - 自己编写一个64位shellcode.参考shellcode指导. - 自己编写一个 ...