20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算
20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算
一、码云链接
1、Git提交日志已经实现一个功能/一个bug修复的注释说明,如图所示;
2、测试代码并未上传;
3、主类位于Main.java中;
4、若有修改,仍会更新;
二、需求分析
之前在20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算里面已经对需求分析作出了总体的阐述,在此不作赘述。上一周,我们小组已经实现了在一个命令行程序中:
- 计算小学四则运算题目(加、减、乘、除);
- 支持整数、多运算符、真分数运算;
所以我们本周的主要任务(要实现的需求)是:
- 自动生成小学四则运算题目(加、减、乘、除);
- 统计学生的正确率;
三、设计思路
之前在20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算里面已经指出了“如何计算带整数、多运算符、真分数的小学四则运算题目”的设计思路,在这里我主要分析关于如何实现本次需求的设计思路。
1、如何自动生成小学四则运算题目:Teacher类的设计
要随机生成一个四则运算题目,其总体思路大致分两种:
- 设计随机生成一个中缀表达式,作为四则运算的题目;
- 设计随机生成一个后缀表达式,再将其转化为中缀表达式,作为四则运算的题目;
比较这两种思路,我认为后者更加有利于括号的生成:当我们随机生成了一个后缀表达式,只需要逆向的求出计算顺序,即在正确的位置生成括号,从而生成相应的中缀表达式。
关于后者,我听说孙勖哲同学在网上找到了类似的代码,我之后会问他要链接,补充在这里。(我选择用前者实现的原因,主要是......怎么生成后缀表达式我没想到什么好算法,在网上也没找到。)
关于前者,如何随机生成一个中缀表达式,我的主要设计思路是:
- 随机生成n个加减乘除运算符;
- 在运算符之间以及表达式的开头结尾随机插入数字,形成一个没有括号的中缀表达式;
- 允许在至少包含两个数字和一个运算符的情况下产生括号;
- 识别并且去掉没有意义的括号;
我们小组以上述思路为指导,设计了Teacher类:
CreStr(int n)
方法随机生成一个String
类包含n个加减乘除运算符;InpNum()
方法在运算符之间以及表达式的开头结尾随机插入数字,形成一个没有括号的中缀表达式;InPar()
方法随机产生括号;DelPar()
方法识别并且去掉没有意义的括号;CreQue(int n)
方法顺序执行上述方法,产生题目;
2、如何统计学生的正确率:Student类的设计
Student类的主要功能应该是包括:
- 输入答案;
- 核对答案是否正确;
- 统计正确率;
综上所述,Student类的设计思路如下:
Answer(StringBuffer que)
输入答案并且核对答案是否正确;getPro()
统计正确率;
四、UML类图
五、功能截图
六、结对感受
这一周的结对编程比起上一周更难的地方在于思路的设计,对于怎么产生一个中缀表达式,我们讨论了很久,一再地改进算法。虽然最后的算法不是最理想的设计(不是先产生后缀表达式),但是我们很开心,因为程序完全是我们自己设计的,也是我们自己一点点写的。最后统计一下,不加上测试代码,大约有600余行,有一点点成就感吧。
七、结对编程的照片
附:遇到的问题及部分解决方法
1、随机数的产生范围
rand.nextInt(n)
里面的参数n是产生一个0 <= nextInt(n) < n的随机数,即0~n-1,参考链接rand.nextint()
需要注意rand是Random
产生的对象,Random
要用import java.util.Random;
引入。
最新文章
- jQuery代码节选(筛选)
- OutputCache属性详解(一)一Duration、VaryByParam
- MVC之前的那点事儿系列(3):HttpRuntime详解分析(下)
- [BZOJ1061][Noi 2008]志愿者招募(网络流)
- Deep Learning 初识
- SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件
- 第十三篇 一个安装、管理windows服务的桌面程序
- Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等
- # 20175333曹雅坤《Java程序设计》第1周学习总结
- cygwin 安装 apt-cyg
- 如何恢复已禁用的console.log?
- js中判断数据类型的4中方法
- GWAS研究可利用的数据库(持续更新)
- 快速入门Treap(代码实现)
- 流媒体技术学习笔记之(十八)互联网草案HTTP直播流2017年5月
- nohup 详解
- Technical Information ARM-related JTAG / SWD / SWV / ETM Target Interfaces
- application.properties详解 --springBoot配置文件
- bzoj2054: 疯狂的馒头(并查集)
- 深入分析jquery解析json数据
热门文章
- C++: typedef与template的配合使用;
- 用go实现一个redis-cli
- LSTM时间序列预测及网络层搭建
- KMP算法的next[]数组 的求法
- elasticsearch 通过HTTP RESTful API 操作数据
- 快速傅里叶变换(Fast Fourier Transform, FFT)和短时傅里叶变换(short-time Fourier transform,STFT )【资料整理】【自用】
- 使用C#的HttpWebRequest模拟登陆网站
- 细说REST API安全之防止重放攻击
- 细说JDK日志组件
- Python 生成requirement 使用requirements.txt安装类库