第一次作业——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 点评内容: 首先,你对电脑很感兴趣,兴趣就是 ...
随机推荐
- Linux内存调试工具初探-MEMWATCH(转)
C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权.这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级. 内存泄漏(即 malloc() ...
- 【js】按下enter键禁止表单自动提交
//enter键盘事件 document.onkeypress=function(){ if(event.keyCode==13){ return false; } }
- #leetcode刷题之路34-在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log n) 级别.如果数组中不存在目标值,返回 [-1 ...
- 第一次作业:基于Linux-0.12的进程分析
这次作业主要基于Linux-0.12的源代码,分析Linux是如何组织进程,进程的状态之间是如何转换,以及进程是如何调度的. 一. 进程的概念: 1.进程就是:程序在数据集合上的一次运行过程,是系统进 ...
- 使用MATLAB工具deploytool打包不成功的解决办法
下面解决方法是来自百度贴吧一抹伊静的解决办法,很好用,非常感谢,现记录下来以便后续查看: 这个问题是2014a 需要破解:下载一个破解文件,原因是matlab未完全破解,2014a的破解办法:http ...
- 安装luasocket 的正确姿势
在lua中用下面这种方式使用socket,安装luasocket-2.0.2后老是报一些莫名其妙的错误. require("socket") 下面是部分报错信息 lua: erro ...
- 20155231 邵煜楠《网络对抗技术》实验一 PC平台逆向破解
20155231 邵煜楠<网络对抗技术>实验一 PC平台逆向破解 实验内容 直接修改程序机器指令,改变程序执行流程: 通过构造输入参数,造成BOF攻击,改变程序执行流: 注入Shellco ...
- 学生管理之Bootstrap初体验
Bootstrap,来自 Twitter,是目前比较受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstra ...
- h5 和之前版本的区别
html5和之前版本的区别就是:以前版本多采用<tr><td>等标签,对于webapp的开发不是很好把控.H5采用<div>等标签直接进行布局(且多了许多标签功能很 ...
- lua编程之元表与元方法
一. 前言 lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo等人 ...