20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)
20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)
一、需求分析
- 能随机生成n道四则运算题目,n由使用者输入
- 支持分数运算
- 支持多运算符
- 能够判断正误,错误时能提醒并输出正确答案
- 能计算出正确率
二、设计思路
本项目主要分为两大部分。第一部分是对复杂计算式的计算,第二部分是随机题目的生成。
对于复杂计算式的计算,我参考了娄老师的博客2016-2017-2 《Java 程序设计》课堂实践项目——数据结构应用中的逆波兰式的思想来解决,真分数的运算参考课本中第四章的例子22。
对于随机计算式的生成,我利用了Random类中的nextInt()方法,根据生成的随机数,生成对应的运算符和数字,从而形成计算式。
三、本周达成功能:
- 能够随机生成n道题目,n由用户输入;
- 支持真分数运算,支持多运算符;
- 能够计算正确率。
三、关键代码及解释
复杂计算式的读取与计算:
Rational manage() {
int i=0;
Rational r = new Rational();
double d;
while(true) {
if(i>=a.length())
break;
char c = a.charAt(i);
if(c>='0' && c<='9') {//从字符串中检测数字
String temp = String.valueOf(c);
String s = new String();
s = s+temp;
i++;
if(i>=a.length()) {
d = Double.parseDouble(s);
r.setNumerator(d);
datastack.push(r);
break;
}
c = a.charAt(i);
while(c>='0' && c<='9') {
temp = String.valueOf(c);
s = s+temp;
i++;
if(i>=a.length())
break;
c = a.charAt(i);
}
d = Double.parseDouble(s);
r.setNumerator(d);
datastack.push(r);
continue;
}
else if(c=='*' || c=='/') {//从字符串中检测运算符
while(true) {
if(charstack.top==-1) {//如果符号栈顶无元素,入栈。
charstack.push(c);
break;
}
if(charstack.a[charstack.top]=='+' || charstack.a[charstack.top]=='-') {//如果符号栈顶是+或-,入栈。
charstack.push(c);
break;
}
else if((charstack.a[charstack.top]=='*' || charstack.a[charstack.top]=='/') && (datastack.top>=1)) {//如果符号栈顶是*或/,并且栈内元素大于等于1,计算。
calculate(charstack.a[charstack.top]);
continue;
}
else {
charstack.push(c);
break;
}
}
}
else if(c=='+' || c=='-') {
while(true) {
if(charstack.top==-1) {//如果符号栈顶无元素,入栈。
charstack.push(c);
break;
}
else if((charstack.a[charstack.top]=='+' || charstack.a[charstack.top]=='-' || charstack.a[charstack.top]=='*' || charstack.a[charstack.top]=='/') && (datastack.top>=1)) {
calculate(charstack.a[charstack.top]);//计算。
continue;
}
else {
charstack.push(c);
break;
}
}
}
else if(c=='(') {//如果符号是(,入栈。
charstack.push(c);
}
else if(c==')') {//如果符号是),栈内符号依次计算。
while(true) {
if(charstack.a[charstack.top]=='(') {
charstack.pop();
break;
}
else {
calculate(charstack.a[charstack.top]);
}
}
}
i++;
}
while(true) {
if(datastack.top>=1)
calculate(charstack.a[charstack.top]);
else
break;
}
return datastack.pop();
}
四、UML图
五、测试方法
六、运行过程截图
七、代码托管
八、遇到的困难
问题一:随机生成题目,如何随机生成括号,以及如何保证生成计算式的正确性。
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 0.5 | 0.5 |
Estimate | 估计这个任务需要多少时间 | 0.5 | 1 |
Development | 开发 | 2 | 2.5 |
Analysis | 需求分析(包括学习新技术) | 2 | 4 |
Design Spec | 生成设计文档 | 1 | 1 |
Disign Review | 设计复审(和同事审核设计文档) | 0.5 | 1 |
Code Standard | 代码规范 | 2 | 2 |
Design | 具体设计 | 3 | 2 |
Coding | 具体编码 | 5 | 6 |
Code Review | 代码复审 | 1 | 1.5 |
Test | 测试(自我测试,修改代码,提交修改) | 2 | 3 |
Reporting | 报告 | 2 | 2.5 |
Test Report | 测试报告 | 1.5 | 2 |
Size Measurement | 计算工作量 | 0.5 | 0.5 |
Postmortem&Process Improvement Plan | 事后总结,并提出过程改进计划 | 1 | 1 |
total | 合计 | 24.5 | 30.5 |
九、点评伙伴
随着合作的次数不断增加,我和队友的配合也愈发默契了,结队编程的效率有显著的提升。在关键问题的决策我们也能很快达成共识,这样很有利于我们项目的推进。希望我们以后还能一起合作,一起学习,一起做项目。
20165101刘天野 2017-2018-2 《Java程序设计》 结对编程练习_四则运算(第二周)的更多相关文章
- 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...
- 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...
- 20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172324 姓名 :曾程 伙伴第一周博客地址: 对结对伙伴的评价:一个很优秀的同学,在这次项目中 ...
- 20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有 ...
- 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...
- 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...
- 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周
一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...
随机推荐
- 拦截asp.net输出流并进行处理的方法
本文实例主要实现对已经生成了HTML的页面做一些输出到客户端之前的处理. 方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有 ...
- Extjs4 中date时间格式的问题
在Grid中显示时间,后台传过来的是date格式的数据(PHP date('Y-m-d', time()),一般在Ext model中定义数据的类型和格式: {name:'birth', type:' ...
- Error in registration. Error: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授
本文转载至 http://blog.csdn.net/woaifen3344/article/details/41311023 Code3000极光推送erroryour certificate n ...
- Java中匿名内部类
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...
- IE强制不使用兼容模式
[caption id="attachment_471" align="alignnone" width="431"] 强制不使用兼容模式[ ...
- MD5-【验签】
MD5是什么? MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹".任何一个文件,无论是 ...
- MFC DLL获取当前路径
.首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...
- 2015-03-11——简析DOM规范
DOM 0级指浏览器专有的,非标准的方法.对象和集合. DOM 1级 1998年发布包括:DOM coreDOM html DOM 2级 DOM2 core 2000年发布 DOM2 html 20 ...
- linux库冲突解决方法 apt purge / aptitude purge
remove libs: [apt-get purge remove] or [aptitude purge] how to use apt-get and aptitude https://blog ...
- Python开发【第六章】:面向对象
编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...