2017-2018-2 20172323 『Java程序设计』课程 结对编程练习_四则运算
结对编程的好丽友
- 20172323 王禹涵:中缀转后缀
- 20172314 方艺雯:后缀表达式的计算
- 20172305 谭鑫:中缀表达式的输出
需求分析
- 能随机生成由使用者确定的任意多道四则运算题目
- 题目的难度等级可以选择,也可以选择不做混合运算
- 题目运算实现中缀表达式转为后缀表达式并计算
- 可以判断正误,并计算正确率
- 支持真分数的运算
设计思路
无栈
首先要确定生成题目的数量,可以用一个循环,使用Scanner,循环次数由用户输入的数确定。
算式的产生
写一个类实现整数的四则运算:定义两个整数numerator和denominator,利用 int nextInt(4) 方法随机输出0123四个整数,分别代表进行加减乘除运算,然后根据随机输出实现的的运算符进行numerator和denominator的加减乘除运算。
再写一个类实现分数的四则运算:利用书上的第七章RationalNumber和RationalTester类可以实现。
还需要判断正误的操作,并输出成绩和正确率。再写一个类,将运算结果与用户输入的值比较,用if-else语句输出“正确”或“错误”并利用“x++”统计正确题目个数,与题目总数相除即得正确率。
这种方法只是最开始的简单构思,并没有实现要求的所有功能,比如“实现中缀表达式转为后缀表达式并计算”,在老师讲完有关栈的知识后进一步构思。
有栈
产生式子:首先,让用户选择题目的难度等级,分别对应不同数量的数字进行运算,确定随机产生的整数的个数,定义两个整数numerator和denominator代表分子和分母。分数的产生利用书上第七章RationalNumber类和RationalTest类(也可以单独调用该方法只进行分式的计算),然后调用函数StringTokenizer将分数作为一个String型的,然后同时调用产生分数和整数混合,然后用一个hasMoreTokens方法遍历所有的数,遇到String型的提出,遇到整数型的则将其作为分子,分母为1,然后将这些数存入设立的栈1中(全为分数),然后另外设立一个栈2,利用 int nextInt(4) 方法随机输出0123四个整数(产生的数量为栈1 中数字数量减一),分别代表加减乘除运算符,将数存入栈中,然后先读取栈1的一个数字,然后读取栈2的一个运算符,然后继续读取栈1的,直到读取完所有的数。然后再将这些数输出,此时这些数都是String型的分数,返回出来字符串再用next循环,一个一个分开,分数在中缀转后缀时,2/3为一个整体,转成后缀,声称出来又是一串,分开后next出来一个分数,创建一个对象自定义以/为分隔符分开。得出结果,利用RationalNumber类的reduce和gcd方法化简,结果为真分数的话会保留分数形式,假分数的话结果为整数。
判断正误:将用户输入的数字与计算机的结果比较,输出正误。如果答案是分数,分别比较分子分母来判断。
统计正确率:用一个循环,当判断正误时为正确时,正确题数加一,最后总数与题目数相除可得。
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 1 | 1 |
Estimate | 估计这个任务需要多少时间 | 20 | |
Development | 开发 | 2 | 10 |
Analysis | 需求分析 (包括学习新技术) | 2 | 2 |
Design Spec | 生成设计文档 | 1 | 1 |
Design Review | 设计复审 (和同事审核设计文档) | 0.5 | 2 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.5 | 0.5 |
Design | 具体设计 | 2 | |
Coding | 具体编码 | 2 | |
Code Review | 代码复审 | 1 | |
Test | 测试(自我测试,修改代码,提交修改) | 1 | |
Reporting | 报告 | 2 | |
Test Report | 测试报告 | 2 | |
Size Measurement | 计算工作量 | 1 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 1 |
代码格式规范
按照IDEA的格式规范,默认缩进格式为4空格,用tab键缩进。
代码命名简洁易懂,包含必要信息有助于理解代码。
UML
遇到的困难及解决方法
- 问题1:关于栈的代码实现
- 解决方案:
java.util
包里有一个实现堆栈数据的Stack类,里面提供了完成标准堆栈操作的方法。
参考链接:栈的代码实现
- 问题2:关于题目生成时数字与运算符号的拼接问题,我的意见是先编写一个类,随机生成两个数字和一个运算符号,将生成的结果(可能为整数也可能为分数)存入数组,在另一个类中再随机调用里面的数字和另一数组里的运算符最终拼接成一道题,而谭鑫的意见是编写一个循环,使一个数字加一个符号的组合不断的拼接最终成为一道题。
- 解决方案:我的问题在于化简为繁,调用新生成的数字和符号进行拼接时,依然还是要借用循环进行题目的拼接,所以基本是没有用处的。最初我的设计思路是可以将分数的“/”号和进行除法的“÷”号区分开,但谭鑫同学诡计多端,也成功解决了这一问题,所以我的方案自然流产。
- 问题3:加括号的问题上,我的方案是先生成一道题,在两边加上括号之后,再拼接上新的一道题,而谭鑫同学的方案是生成一道题,提取出其中一部分加上括号。
- 解决方案:我质疑他的地方在于,他加括号的方法太过繁琐,需要判断括号周围的符号是数字、运算符还是空格,需要大量的if-else语句进行判断,而且他的代码运行已经出现了一些奇怪的没找到原因的错误。但最后,因为我的方案提出太晚,再进行大改不利于项目的完成,方案再次流产。
结对评价
- 20172305谭鑫:作为我们组的老司机,掌握着我们组的前进方向。编程的思路很清楚,能让人感觉到有大局观。
- 20172314方艺雯:方艺雯主要负责我们组的需求分析,从给出的内容就能看出,她非常的细致认真,能考虑到很多我们忽略掉的问题。
- 总的来说,我们组的成员都是非常努力认真!!!
参考资料
2017-2018-2 20172323 『Java程序设计』课程 结对编程练习_四则运算的更多相关文章
- 2017-2018-2 20172323 『Java程序设计』课程 结对编程练习_四则运算 2
相关过程截图 关键代码解释 将运算式分开的代码 String[] result = num.split("\\s"); 将输入的num以空格为间隔符号分开,将每一个间隔开的字符存入 ...
- 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算
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 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...
随机推荐
- linux系统常用命令统计及shell特殊字符
shell 特殊字符:1.通配符2.管道 1.通配符 1.1星号(*):匹配任意长度 1.2问号(?):匹配一个长度的字符 1.3方括号([......]):匹配其中指定的字符 1.4方括号([-]) ...
- spring-quartz 定时器 给targetMethod传递参数
今天在做一个项目的时候,要给一个定时器任务的执行方法传递参数,在网上找了一下资料,可以使用arguments参数: <bean id="subsidyJobDetail" ...
- 3D立方体
效果图 主要用到的3D属性 1.保留子元素的3d属性:transform-style:preserve-3d; 2.2D变形属性: ①transform:translate()平移,分X轴,Y轴,Z轴 ...
- python闭包的概念及使用
闭包:在函数里定义了另外一个函数(函数嵌套),内函数里运用了外函数的变量,外函数返回内函数的函数引用(函数名). nonlocal 的使用:闭包内部函数可直接调用外部函数的变量,如果修改需要使用non ...
- IOS和Android系统区别详解
IOS系统(非开源,不可扩展) iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序. 1.iOS的编程语言Objective-C 2.IOS采用的是沙盒运行机制 ...
- json传值给前端页面,出现堆栈溢出问题
用的com.alibaba.fastjson.JSONObject这个包 原因:JSONObject将对象转json字符串时候没有关闭循环引用导致的堆栈溢出. 解决办法是 使用这个 JSONObjec ...
- 清华大学《C++语言程序设计基础》线上课程笔记04---指针
指针 static int i; static int* ptr = &i; 此处的*表示ptr是指针类型(地址类型),用来存放目标数据的地址 其本身也有地址,所以又指向指针的指针; *前面的 ...
- 如何在golang中打印grpc详细日志
最近捣鼓fabric,在一个tls证书问题上纠结挺久,连接orderer服务时候,grpc日志总是冷冰冰的显示这个信息 Orderer Client Status Code: (2) CONNECTI ...
- CSS基础part2
CSS属性操作-文本 文本颜色 <head> <style> p{ /*color:#8B5742 ;色码表*/ color: RGBA(255,0,0,0.5); /*调色, ...
- 苏州Uber优步司机奖励政策(1月11日~1月17日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...