2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算
2017-2018-2 165X 『Java程序设计』课程
结对编程练习_四则运算
经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法。在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉得孤单又无趣?这次我们来体验一种新的开发模式——结对编程,让你和小伙伴一起分析,一起思考,一起测试,一起完善,在思维的碰撞中体验结对编程的魅力!
————————CONTENTS————————
1.题目描述
邹欣老师在《现代软件工程讲义 3 结对编程和两人合作》一文中提到:
在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。
生活中也有很多类似的搭档关系,例如:
- 越野赛车(驾驶,领航员)
- 驾驶飞机(驾驶,副驾驶)
- 战斗机的编组(长机,僚机)
我们把结对编程中两位合作者的关系看作驾驶员和领航员,其中:
- 驾驶员(Driver)是控制键盘输入的人
- 领航员(Navigator)起到领航、提醒的作用
在本次结对编程中,即需要两位合作者之间建立驾驶员和领航员的关系。
具体题目要求参见:『结对编程项目-四则运算』
如何对表达式进行求值运算呢?我们先来一个简单的入门。
一、中缀表达式与后缀表达式
中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运算数后面的表达式,比如1 2 +。为什么要讲后缀表达式呢?因为电脑运算后缀表达式会比中缀表达式方便很多。那么如何运算后缀表达式呢?
举个例子:计算9+(3-1)*3+6/2,转换为后缀表达式即为9 3 1 - 3 * + 6 2 / +(怎么转换后面再讲)。计算规则就是建立一个空栈,遇到数字就入栈,遇到符号就以符号前面的两个数为运算数进行计算。

二、中缀表达式转换为后缀表达式
法则:
- 如果遇到数字,我们就直接将其输出。
- 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
- 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
- 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
- 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
有了以上的了解,大家可以尝试自己做一个“计算器”啦~
(更多参考:娄老师的博客2016-2017-2 《Java 程序设计》课堂实践项目——数据结构应用)
2.测试说明
娄老师在《Intellj IDEA 简易教程——单元测试》部分提到:
如果别人用自己的代码发现一堆Bugs,那多没面子!怎么办?写了产品代码,我们还要写测试代码,证明自己的代码没有问题。Java编程时,程序员对类实现的测试叫单元测试。这里我们设计了一个测试用例(Test Case),测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
产品代码主要进行三个方面的测试:
- 正常测试
- 异常测试
- 边界测试
与之有异曲同工之妙的一种标准是:『Right-BICEP法则』
其中 Right 指程序的正确性,BICEP 每个字母代指一个测试的方面。具体来说:
- Right: 传入程序单元期待的参数、数据,是否能够得到正确的结果。
- Boundary Conditions: 程序单元是否能够正确处理所有的边界条件。
- Inverse relationships: 反向测试。
- Cross-check: 交叉测试。
- Error-condition: 异常情况。
- Performance: 性能。
对于本次四则运算的结对编程项目,需从以下几方面考虑进行测试:
- Right: 按照设计者意图输入参数时,程序能够正确输出结果。
- B: 在程序受到极端参数时,程序能够正确进行响应。
- E: 有同学选择将出题结果写入一个文件。如果此时硬盘满了,文件写不进去了,怎么办?
- P: 出题速度应该足够快。测试生成100、1000、10000甚至更多道题目所需的时间。
以下为一些基本的测试用例,可供参考:
- 2 + 5 = 7
- 4 - 9 = -5
- 3 ÷ 7 = 3/7
- 2 ÷ 6 = 1/3
- 5 * (1 + 3) = 20
- 2/3 - 1/5 = 7/15
- 5/6 - 2/3 = 1/6
- 2/5 - 3/20 = 1/4
- 13 - 2 * 5 = 3
- (2/3 + 1/2) * 6/7 = 1
- (5 - 2) * (4 + 1) = 15
(更多参考:邹欣老师的博客《软件工程练习:模块化,单元测试,回归测试,TDD》)
3.提交要求
一、代码提交
- 将源代码提交至自己的码云项目中。
- 如何使用Git进行团队合作?参考《使用GitHub进行团队合作》
【注意】
- Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Message的编写
- Git提交日志需保证有意义,如果整个项目持续使用无意义的提交日志,这里会是一个扣分项,如之前作业中的:
- weekxxx
- Pxxx代码
- 纯数字类名:1.2
- 日期:0409
- 只写文件名
- ......
二、博客规范
- 小组的两位同学都需要提交各自的博客,最终将视博客的质量给出各自的博客部分分数。
- 博客中需附:
- 码云链接
- 需求分析
- 设计思路
- UML类图
- 功能截图
- 结对感受
- 结对编程的照片
- ......
- 更多博客规范,参见:结对编程项目-四则运算
三、截止时间
本项目持续两周时间,从发布作业当天开始计算
- 第一周:阶段性总结
- 第二周:整体总结
附:参考资料
- 本次作业要求
- 结对编程
- 实现过程
- 单元测试
- 其他
2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算的更多相关文章
- 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周
2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...
- 2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算
2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ...
- 20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结
20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 在这次项目的完成过程中刘辰同学付出了很多,在代码的实践上完成的很出色,在技 ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...
- 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...
- 20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172324 姓名 :曾程 伙伴第一周博客地址: 对结对伙伴的评价:一个很优秀的同学,在这次项目中 ...
随机推荐
- codeforces#983 B. XOR-pyramid (dp)
参考博客:https://www.01hai.com/note/av137952. 题意:首先定义 (b代表一个数组) 给出一个区间,l,r,求它最大的连续子序列的函数值 分析: 定义dp[x][y] ...
- 关于token登录逻辑分析
前言: token登录上一家公司也写过,迷迷糊糊的, 现在做一个APP,需求为每次调用接口都会传token,登录注册等特殊的除外, 逻辑整理一下还是比较简单的 主要的问题还是,如何在框架中找到较好的插 ...
- 第四章· Redis的事务、锁及管理命令
一.事务介绍 二.Redis乐观锁介绍 三.Redis管理命令 一.事务介绍 Redis的事务与关系型数据库中的事务区别 1)在MySQL中讲过的事务,具有A.C.I.D四个特性 Atomic(原子性 ...
- 映美FP-530K+打印发票卡纸
最近打发票卡纸了几次,只能作废掉,硬件不太好排查,卡纸都是在发票的中间位置,我在卡纸的时候观察了好几次,打开打印机盖子,直接裸露这样看里面的打印状况,目前发现了两种卡纸位置. 如图,一种是后面的黑色塑 ...
- eclipse报错 : One or more constraints have not been satisfied.
当eclipse进行报错时,但是不影响运行时,这种错误一般是编译时的问题 进行修改3个地方,即可完成 一 : 进行修改这三个地方的配置文件,都改成你统一的jdk版本,和你用的Dynamic Web ...
- FileZilla-01
FileZilla FTP-client可用于通过上传和下载文件和图像来管理WordPress网站. 设置选项: 01.网址:ftp地址(如果网址是http://example.com,则通常是ftp ...
- 【LR9】【LOJ561】CommonAnts 的调和数 数论 筛法
题目大意 有一个长度为 \(n\) 的序列. 有 \(m\) 次修改,每次给你 \(x,y\),令 \(\forall 1\leq i\leq \lfloor\frac{n}{x}\rfloor,a_ ...
- GDOI2018游记&题解
day0 第一件事当然是去酒店入住+领一堆东西. 感觉酒店不错,而且离学校挺近的,走路10分钟不到,骑车5分钟就到了. 然后去学校吃饭.我们在教工饭堂吃饭,饭菜还不错,但是没有筷子差评. 吃完饭后找了 ...
- LoadRunner开发ftp协议接口之上传文件脚本
Action() { //建立一个ftp对象 FTP ftp1=0; //建立FTP连接并登录 ftp_logon_ex(&ftp1,"ftpLogon", "U ...
- [FJOI2016]建筑师
题目描述 小 Z 是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建 n 个建筑,每个建筑的高度是 1 到 n 之间的一个整数. 小 Z 有很严重的强迫症,他不喜欢有两个建筑的高度相同. ...