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;引入。
20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算的更多相关文章
- 20165205 2017-2018-2《Java程序设计》结对编程一 第二周总结
20165205 2017-2018-2<Java程序设计>结对编程一 第二周总结 设计思路 编写主类Arithmetic4 编写ArithmeticFunc类来实现计算,其中包括:加.减 ...
- ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结
20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...
- 20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算
一.码云链接 项目名称FAO 码云链接 二.需求分析 实现一个命令行程序: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确 ...
- 20165232 2017-2018-2《Java程序设计》结对编程一 第一周总结
20165232 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...
- 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周
2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...
- 20165205 2017-2018-2《Java程序设计》结对编程一 第一周总结
20165205 2017-2018-2<Java程序设计>结对编程一 第一周总结 需求分析 对输入的算式进行计算,要求满足一下条件: 支持整数运算,如2+5,47+7865. 支持多运算 ...
- 20165219 2017-2018-2《Java程序设计》结对编程一 第一周总结
20165219 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...
- 20172319 2018.04.11-16 《Java程序设计教程》 第6周学习总结
20172319 2018.04.11-16 <Java程序设计教程>第6周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...
- 20172319 2018.04.11 《Java程序设计教程》第7周课堂测验(补写博客)
20172319 2018.04.11 <Java程序设计教程>第7周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...
随机推荐
- WiFi热点(1):windows8建wifi虚拟热点
在windows8系统中,打开记事本,写入下面两行:@netsh wlan set hostednetwork mode=allow ssid=wuyazhe key=88888888@netsh w ...
- bzoj4326 树链剖分 + 线段树 // 二分 lca + 树上差分
https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题意:N个点的树上给M条树链,问去掉一条边的权值之后所有树链长度和的最大值最小是多少. 首先 ...
- npm总是报错:unable to verify the first certificate
今天npm install总是报错:unable to verify the first certificate(无法验证第一证书),查了一下发现 As of February 27, 2014, n ...
- saltstack syndic
#syndic 相当于master的代理,master通过syndic代理控制node主机 master <------ syndic+master <---------- node ma ...
- No Spring WebApplicationInitializer types detected on classpath
情况: 1.使用 Tomcat 8 Maven 插件 2.使用 ServletContainerInitializer 模式配置 Spring 配置好后发现只会加载 spring-web 配置的 We ...
- nginx做rails项目web服务器缓存配置方法
nginx作为Web服务器.或反向代理服务器都可以使用缓存 一.作为Web服务器 nginx可以通过 expires 指令来设置响应头的过期时间,实现浏览器缓存(Browser Caching),即浏 ...
- 转: Linux 系统调用sysconf 获取系统配置信息
1.前言 linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数. 2.sysconf 函数 man一下sysconf,解释这个函数用来获取系统执行的配置信息.例如页大小. ...
- jQuery克隆html元素并改变id
如题,前端操作经常需要ajax异步刷新html页面数据.有时候js里面拼接html代码很麻烦. 因此选择一个div克隆并改变一些值就省了很多事.这个div也可以提前写在html里面hide() 下面是 ...
- MVC、MVP和MVVC区别
https://blog.csdn.net/victoryzn/article/details/78392128
- js中检测数据类型的几种方式
1.typeof 一元运算符,用来检测数据类型.只可以检测number,string,boolean,object,function,undefined. 对于基本数据类型是没有问题的,但是遇到引用数 ...