Java四则运算总结
Java结对编程四则运算第二周总结
需求分析
- 要随机产生规定数量的式子。
- 要对分式进行计算。
- 要支持多语言。
- 要自动判断对错。
设计思路
- 确定要选用的语言;
- 要产生随机数;
- 在产生随机数的时候就要产生随机的运算符;
- 在产生数字与运算符时最后一个数字之后就不能再产生运算符(运算符的数量始终比数字少1);
- 在一个式子中要多次产生随机数与运算符因此要用到循环;
- 在循环结束时就产生了一个式子就要求进行计算与输入;
- 在产生中缀的式子后要将其转化为后缀;
- 在输入完之后就要判断对错,统计正确率;

实现过程中的关键代码解释
- 1.拆分式子
ArrayList<String> result = new ArrayList<String>();
StringTokenizer tokenizer = new StringTokenizer(str," ");
这段代码是对上周代码的改进,原先我用的是一个一字符的拆分的方法,这周因为要加入分数运算我发现他会把分数也当做除法进行拆分所以就不得不找到另一个方法对输入的字符串进行拆分。StringTokenizer刚好就可以避免这个问题。
- 2.计算多个分数
public String calculate(ArrayList<String> postOrder)throws IOException {
Stack stack = new Stack();
//ArrayList<String> stack = postOrder;
String res = "";
FileWriter fm = new FileWriter("answer.txt");
BufferedWriter bufm = new BufferedWriter(fm);
for (int i = 0; i < postOrder.size(); i++) { if (res.equals("")) {
if (Character.isDigit(postOrder.get(i).charAt(0))) {
stack.push(Integer.parseInt(postOrder.get(i)));
} else {
Integer back = (Integer) stack.pop();
Integer front = (Integer) stack.pop();
stack.push(back);
Calculator calculator2 = new Calculator();
switch (postOrder.get(i).charAt(0)) {
case '+':
res = calculator2.compute(front + "/1", "+", back + "/1");
//res = (front + back);
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '-':
res = calculator2.compute(front + "/1", "-", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();> break;
case '*':
res = calculator2.compute(front + "/1", "*", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '/':
res = calculator2.compute(front + "/1", "/", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
}
} }
else {
if (Character.isDigit(postOrder.get(i).charAt(0))) {
stack.push(Integer.parseInt(postOrder.get(i)));
} else {
Integer back = (Integer) stack.pop();
Calculator calculator2 = new Calculator();
switch (postOrder.get(i).charAt(0)) {
case '+':
res = calculator2.compute(res, "+", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '-':
res = calculator2.compute(res, "-", back + "/1");
bufm.write(res);> bufm.flush();
bufm.newLine();
break;
case '*':> res = calculator2.compute(res, "*", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '/':
res = calculator2.compute(res, "/", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
}
}
}
}
return res;
}
由于参考课本上的代码只能进行两个分数的计算所我就加了这么一个方法来进行多个这正数的运算
- 将答案写入文件
switch (postOrder.get(i).charAt(0)) {
case '+':
res = calculator2.compute(res, "+", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '-':
res = calculator2.compute(res, "-", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '*':
res = calculator2.compute(res, "*", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '/':
res = calculator2.compute(res, "/", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
}
将计算的结果写入文件有利于在判断是将文件读入。
运行过程截图



测试



代码托管地址
遇到的问题及其解决方法。
- 问题1 如何加入分数的运算。
解决:这是由于我前周写代码是考虑不周所带来的问题本来一直没找到解决的方法,后来在和结对伙伴和张旭生同学交流之后我就找到上面关键代码中的第一个代码,大大的优化了代码的结构和运行的时间。 - 问题2(上周的问题) 如何解决无法产生括号的问题,就是当除不尽时的计算的误差大?
这个问题再加入了分式运算之后就得到了解决。
— 对于答案的判断
由于代码的改动发现上周的方法已经不再适用无法直接返回答案,于是我就先将答案输出到TXT文件中,在判断的那个类时再读入。就解决无法直接返回答案的这个问题。
对结对的小伙伴做出评价
- 结对伙伴: 20162312 张家铖
这周编写程序时几乎都是在一起写的,对彼此的写代码的方式有了进一步的了解,他的建议对我的帮助比较大。
由于结对伙伴用的是bash有很多方法有点衔接不上。
PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
|---|---|---|---|
| Planning | 计划 | 1 | 1 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
| · Analysis | · 需求分析 (包括学习新技术) | 1 | 3 |
| · Design Spec | · 生成设计文档 | 0.5 | 0.5 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 0.5 | 0.5 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1.5 | 1 |
| · Design | · 具体设计 | 2 | 2.5 |
| · Coding | · 具体编码 | 2 | 3 |
| · Code Review | · 代码复审 | 2 | 2 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 2 | 1 |
| Reporting | 报告 | 1 | 1.5 |
| · Test Report | · 测试报告 | 1.5 | 2 |
| · Size Measurement | · 计算工作量 | 1.5 | 1 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1 | 1 |
Java四则运算总结的更多相关文章
- java四则运算
题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...
- JAVA四则运算(读写文件)
完成时间:17:10 package 四则运算试题; import java.io.BufferedReader; import java.io.PrintStream; import java.ut ...
- JAVA四则运算字符串解释器
最近学习到后缀表达式,于是基于后缀表达式的思想,写了一个四则运算解释器,输入字符串类型的四则运算表达式,可以直接得到结果,支持括号嵌套. 实现时主要考虑以下两点: 字符串中运算符和数字分离 运算符优先 ...
- JAVA四则运算算法
一.程序要求 解析一般数学算式,实现简单的带括号的加减乘除运算. 二.基本思路 前面两篇介绍了直接解析字符串和用数组容器辅助解析的两种方式,这次再介绍最常用的解析算法——解析后缀表达式(逆波兰表达式) ...
- java四则运算----前缀、中缀、后缀表达式
接到一个新需求,需要实现可配置公式,然后按公式实现四则运算. 刚拿到需求,第一反应就是用正则匹配‘(’,‘)’,‘+’,‘-’,‘*’,‘/’,来实现四则运算,感觉不复杂. 然后开始coding.发现 ...
- Java四则运算和验证码生成
四则运算 程序设计思想 使用随机数生成100或1000以内数字,用字符串数组实现+-*/的输出.For循环打印出所需要的题数. 程序流程图 package yunsuan; import java.u ...
- java四则运算生成器
题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...
- java四则运算 界面化
本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232 项目的地址:https://github.com/kdays ...
- Java四则运算——图形化界面
一.前提 (1)作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 (2)GitHub地址:https://github ...
随机推荐
- ReactJS组件之间通信
http://www.open-open.com/lib/view/open1473838243065.html
- iOS-setNeedsLayout等布局方法
列举下iOS layout的相关方法: layoutSubviews layoutIfNeeded setNeedsLayout setNeedsDisplay drawRect sizeThatFi ...
- JS循环语句的理解
循环语句就是让程序重复性去做某些工作 最常见的就是for循环 那它的写法都有哪些呢? 1.必须要有初始值 2.要有条件判断 3.状态的改变 4.循环体 一定要控制循环多少次结束,否则就变成了死循环,消 ...
- JZOJ.5230【NOIP2017模拟8.5】队伍统计
Description 现在有n个人要排成一列,编号为1->n .但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面 ...
- MySQL中的注释(有三种)
MysQL支持三种注释: .#... (推荐这种,具有通性) ."-- ..." (注意--后面有一个空格) ./*...*/
- iOS JS与原生交互(全集)
混合开发的重要性不言而喻,一个移动端开发的了解前端开发是一个趋向,总之每个人都向往成为一个全栈工程师,废话不多说,直接上主题 一.交互(UIWebView) 1.OC调用JS (1)OC调用代码 [s ...
- Web Tracking
采集方式_数据采集_用户指南_日志服务-阿里云 https://help.aliyun.com/document_detail/28981.html http://docs-aliyun.cn-han ...
- python基础之类的编码风格
自定义工作流程: 一开始应让代码结构尽可能简单.先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移动独立的模块中.如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中 ...
- 轻松理解MYSQL MVCC 实现机制
轻松理解MYSQL MVCC 实现机制 转载https://blog.csdn.net/whoamiyang/article/details/51901888 1. MVCC简介 1.1 什么是MVC ...
- pandas 修改列名
原始文件 下面是Excel打开以及pd.read_csv() 打开: 里面只是干巴巴的数据,没有列名,so,需要给其设置列名. Method1 不让第一行数据默认当作列名(默认第一行数据是列名了). ...