unknown2
结对作业
本次结对:211606457 郑沐榕、211406242 杨长元
一、预估与实际
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | ||
| • Estimate | • 估计这个任务需要多少时间 | 1 | 1 |
| Development | 开发 | ||
| • Analysis | • 需求分析 (包括学习新技术) | 200 | 300 |
| • Design Spec | • 生成设计文档 | 60 | 30 |
| • Design Review | • 设计复审 | 60 | 0 |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
| • Design | • 具体设计 | 60 | |
| • Coding | • 具体编码 | 720 | 300 |
| • Code Review | • 代码复审 | 45 | 0 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 30 | 0 |
| Reporting | 报告 | ||
| • Test Report | • 测试报告 | 60 | 0 |
| • Size Measurement | • 计算工作量 | 5 | 2 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 60 | 60 |
| 合计 | 1241 | 723 |
二、需求分析
通过百度的方式了解到,小学三到四年级的四则运算有如下的几个特点:
- 混合运算中要包含+、-、×、÷运算
- 不涉及分数/小数运算
- 随机数范围要求是[0,10000)
作业要求:
- 运算符在2~4个(且至少出现两个不同的运算符)
- 可以加括号
- 减法运算的结果不能有负数
- 除法运算除数不能为0,不能有余数
经过分析,我认为,这个程序应当:
- 判断用户输入的参数是否符合设定的要求
- 实现加减乘除混合运算
- 将题目和答案输出到指定文件
- 一道题目要保证至少包含两个不同的运算符
- 所有题目要保证不重复
三、设计
1. 设计思路
- 大概包含四个类:①接收用户输入参数并根据参数调用相应的函数、②生成题目、③计算并返回结果、④存储题目和答案
- 算法的关键:调度场算法与逆波兰表达式
- ...
2. 实现方案
-- 分析需求
-- 把几个方法敲出来在进行主方法调用、完善各方法块的的代码(本来整理完需求是想先写注释再敲代码的,结果发现自己还是不太会用这种方法,所以还是边打边想2333)
四、编码
1. 调试日志
没有...我觉得我没有写出出题和解题的功能就是最大的bug,其他都没啥bug。
2. 关键代码
(这是2333上一个任务的需求,但是改过了,新的需求没整出来,没新内容好展示2333)
public static void calculate1(Integer n) {
Random random = new Random();
Map<Integer,String> question = new HashMap<Integer,String>();
Map<Integer,Integer> answer = new HashMap<Integer,Integer>();
for( int i = 1; i <= n; i++) {
int result = 0;
int parm1 = (int)(Math.random() * MAX_NUM); //final static int MAX_NUM = 100;
int parm2 = (int)(Math.random() * MAX_NUM);
int operater1 = random.nextInt()%2;
switch(operater1) {
case 0:
result = parm1 + parm2;
break;
case 1:
if( parm1 < parm2) {
int t = parm2;
parm2 = parm1;
parm1 = t;
result = parm1 - parm2;
}else {
result = parm1 - parm2;
}break;
}
question.put(i, "" + parm1 + operater1 + parm2);
answer.put(i, result);
}
3. 代码规范
1.为了达到代码自己自解释的目标,任何自定义编程元素在命名时,使用精良完整的单词组合来表达其意。但是有些名称实在过于长,这个可以适当的缩写,不要忘文不知义就可以。这个不是客观的规定。
正例:从远程仓库拉取代码的类命名为 PullCodeFromRemoteRepository。
反例:变量 int a; 的随意命名方式。2.注释的双斜线与注释内容之间有且仅有一个空格。
3.方法参数在定义和传入时,多个参数逗号后边必须加空格。
正例:method("a", "b", "c");--例子中实参的”a”,后边必须要有一个空格。4.在 if/else/for/while/do 语句中必须使用大括号,即使只有一行代码,为了避免采用单行的编码方式:if (condition) statements;
5.避免采用取反逻辑运算符:
说明:取反逻辑不利于快速理解,并且取反逻辑写法必然存在对应的正向逻辑写法。
正例:使用 if (x < 628) 来表达 x 小于 628。
反例:使用 if (!(x >= 628)) 来表达 x 小于 628。6.[参考]对于注释的要求:
第一、能够准确反应设计思想和代码逻辑;
第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。7.在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则);
五、测试
| 测试点 | 测试用例 | 测试结果 | 是否解决(是如何解决) |
|---|---|---|---|
(我。。。。。。)
六、总结
emmmm...怎么说呢...先说说结对编程这事吧,因为事先约定,两个人都不知道个人作业和结对作业是穿插进行的,由于队友近期都在带军训(结对作业开始以来两人还没见上面所以photo也没有啦,本来就没在一块打代码2333),所以这次结对互动仅限于网络上少许的交流。然后单纯是疑问有交集,如何解决和代码都没有交集2333最后是先提交了他的代码。另外,我的命令行编译、运行不了.java文件,上一次就不行,百度搜了解决方法都得不到解决,问同学同学说不知道怎么处理,然后就很难受命令行运行不了,就需要改获取输入的方式,判断为空要换方法,正则也不适用,最后测试结果也没做出来= =。然后代码思路方面,开始觉得括号位置随机、数字随机、运算符随机,还要在考虑随机题目产生出来后减数运算不出现负数、以及除法运算不出现小数,把所有问题同时放在一起考虑,就会觉得太复杂了情况太多种了。后来看群上班里同学在交流想法以及今天课上李佳讲他解决问题的一整个思路,会觉得自己想得太局限,没有放开了去想、分析怎么解决(开始也有想到以前数构有讲过二叉树储存运算式,就去翻以前课件,然后发现逆波兰原来和后序表达式有关,查了后缀中缀看了逆波兰,看懂了解题依旧觉得出题难,确实是没有去分解步骤,没有动笔。然后就没有进一步去思考了扶额23333)群上之前在议论提交时间的时候,有同学说到作业太多没时间,可能是因为有重修课程吧,但是如果只剩专业课那其他作业真的并不多,就软工这玩意一直挂着(扶额),花费的时间也最多(而且很多时候就是花了大把时间完了问题还是没解决OWO)。当然,自己没有尽全力想去写出来,有保留。身在曹营心在汉,知道自己以后就业不走敲代码(软件工程就业领域)这些方向,老师说你们就当成做游戏去完成,不要有太大的负担,但是并没有给我是玩游戏(通关)之类的感觉,项目简单也没感觉好玩,项目难度高也没觉得好玩,没有成败感,仅仅只是当成作业去完成;专业课保证基本不落下(软工就...),只是担心毕设,只是担心能否顺利毕业;也没有担心我专业技能学得太差,以后无法以此作为谋生技能;开学以来也一直在反复思考自己选的那条路,近些天终于确定下来了(欢呼OUO),可以开始安排时间为此做准备了。最后觉得很对不住队友(QAQ),没有给他什么帮助,甚至有点拖后腿的性质。以上是本次结对任务期间大致总结。
unknown2的更多相关文章
- ntdll.dll函数原型
/*NTDLL Base Functions*/NTSYSAPI NTSTATUS NTAPI NtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOI ...
- 类结构体 与 byte[] 转换类
public static class StructConvert { public static object BytesToStruct(byte[] bytes, Type strcutType ...
- Nt内核函数原型and中文
NtLoadDriver 服务控制管理器加载设备驱动. NtUnloadDriver 服务控制管理器支持卸载指定的驱动程序. NtRegisterNewDevice 加载新驱动文件. NtQueryI ...
- iOS 调用私有函数安装app 卸载 app
1.环境 1.OS X EI Caption 10.11.1 & Xcode 7 2.Xcode安装Command Line Tools 3.iPhone 安装AppSync 2.Mobile ...
- 阅读 LdrInitializeThunk
参考: http://blog.csdn.net/hw_henry2008/article/details/6568255 Windows 的 DLL 装入(除 ntdll.dll 外)和连接是通过 ...
- 经典的HTML5游戏及其源码分析
HTML5已经相当强大,在HTML5平台上,我们可以完成很多非常复杂的动画效果,包括游戏在内.早期我们只能利用flash来实现网络游戏,现在我们又多了一种选择,即用HTML5制作游戏.相比flash, ...
- golang 学习笔记 ---数组/字符串/切片
数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.数组的长度是数组类型的组成部分.因为数组的长度是数组类型的一个部分,不同长度或不同类型的数据组成的数组都是不同的类 ...
- Nt函数原型头文件
//转自看雪,可以作为一个头文件使用,方便快捷 1 NTSTATUS NTAPI NtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOID PortI ...
- 使用Spring提供Quartz来实现定时任务
Spring功能越来越多了,用起来还很舒服方便,Quartz实现的定时任务就是一个. 首先是配置文件: <?xml version="1.0" encoding=" ...
随机推荐
- 【TOJ 1072】编辑距离(动态规划)
描述 假设字符串的基本操作仅为:删除一个字符.插入一个字符和将一个字符修改成另一个字符这三种操作. 我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作. 下面我们定义两个字符串的编辑 ...
- ubuntu SDL2 安装时依赖文件导致安装失败
今天打算学习littlev GUI,使用Ubuntu来实现仿真,然后在安装SDL2的时候,始终因为依赖关系导致安装失败,我尝试手动去安装那些有依赖关系的包发现根本不可行,然后我百度上也没有找到合适的法 ...
- 【Java web 容器resin的安装】
#resin的安装 #启动resin #访问resin监听的java web容器端口 resin修改端口监听号
- 1、win10下的Docker+Redis 的下载及简单使用
一.下载Docker: 因为始终注册docker账号不成功,所以在这里点击下载. 选中docker-for-windows/ 选中beta/ 下载这个.msi文件 二.安装 1.安装.msi文件,桌面 ...
- 一条常用的 Sql
select * from table where 条件1 .... group by 字段...... Having 条件1.....Limit 0,10; 1. 根据where ...
- Ruby中区分运行来源的方法(转)
Ruby中区分运行来源的方法 这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if name == 'main':效果,其实Ruby中也有类似语法,需要的朋友可以参考下 ...
- scala(9) Monad
一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已.这句话涉及到了几个概念:单子(Monad),自函子(Endo-Functor),幺半群(Monoid),范畴(category). 范 ...
- 2016-2017-2 20155325实验二《Java面向对象程序设计》实验报告
实验二 面向对象程序设计-1 答案截图 码云代码链接 链接1 实验遇到的问题和解决过程 问题1:在plugins里搜索不到JUnitGenerator V2.0只能搜到Generste Teats 问 ...
- # 2017-2018-1 20155337《信息安全系统设计基础》第5周学习总结+mybash
2017-2018-1 20155337<信息安全系统设计基础>第5周学习总结 教材学习内容总结 不论我们是在用C语言还是用JAVA或是其他的语言编程时,我们会被屏蔽了程序的机器级的实现. ...
- PHP学习笔记之interface关键字
interface用于定义接口 接口里边的方法不需要有方法的实现 implements用于表示类实现某个接口 实现了某个接口之后,必须提供接口中定义的方法的具体实现. 可以用instanceof关键字 ...