Java结对编程四则运算第二周总结

需求分析

  • 要随机产生规定数量的式子。
  • 要对分式进行计算。
  • 要支持多语言。
  • 要自动判断对错。

设计思路

  1. 确定要选用的语言;
  2. 要产生随机数;
  3. 在产生随机数的时候就要产生随机的运算符;
  4. 在产生数字与运算符时最后一个数字之后就不能再产生运算符(运算符的数量始终比数字少1);
  5. 在一个式子中要多次产生随机数与运算符因此要用到循环;
  6. 在循环结束时就产生了一个式子就要求进行计算与输入;
  7. 在产生中缀的式子后要将其转化为后缀;
  8. 在输入完之后就要判断对错,统计正确率;

实现过程中的关键代码解释

  • 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文件中,在判断的那个类时再读入。就解决无法直接返回答案的这个问题。

对结对的小伙伴做出评价

这周编写程序时几乎都是在一起写的,对彼此的写代码的方式有了进一步的了解,他的建议对我的帮助比较大。

由于结对伙伴用的是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四则运算总结的更多相关文章

  1. java四则运算

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  2. JAVA四则运算(读写文件)

    完成时间:17:10 package 四则运算试题; import java.io.BufferedReader; import java.io.PrintStream; import java.ut ...

  3. JAVA四则运算字符串解释器

    最近学习到后缀表达式,于是基于后缀表达式的思想,写了一个四则运算解释器,输入字符串类型的四则运算表达式,可以直接得到结果,支持括号嵌套. 实现时主要考虑以下两点: 字符串中运算符和数字分离 运算符优先 ...

  4. JAVA四则运算算法

    一.程序要求 解析一般数学算式,实现简单的带括号的加减乘除运算. 二.基本思路 前面两篇介绍了直接解析字符串和用数组容器辅助解析的两种方式,这次再介绍最常用的解析算法——解析后缀表达式(逆波兰表达式) ...

  5. java四则运算----前缀、中缀、后缀表达式

    接到一个新需求,需要实现可配置公式,然后按公式实现四则运算. 刚拿到需求,第一反应就是用正则匹配‘(’,‘)’,‘+’,‘-’,‘*’,‘/’,来实现四则运算,感觉不复杂. 然后开始coding.发现 ...

  6. Java四则运算和验证码生成

    四则运算 程序设计思想 使用随机数生成100或1000以内数字,用字符串数组实现+-*/的输出.For循环打印出所需要的题数. 程序流程图 package yunsuan; import java.u ...

  7. java四则运算生成器

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  8. java四则运算 界面化

    本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232 项目的地址:https://github.com/kdays ...

  9. Java四则运算——图形化界面

    一.前提 (1)作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 (2)GitHub地址:https://github ...

随机推荐

  1. js封装日历控件

    最终效果 代码实现 <script> $(function () { $(".j-calendar").calendar({ date: '2017-08-03', c ...

  2. vmware 虚拟机下 ubuntu 与主机共享锐捷

    一直以来.想要学习 linux ,在 vm 虚拟机下安装了 ubuntu 系统. 可是这个系统并不能上网.原因就是 vm 虚拟机的虚拟网卡会和锐捷冲突.锐捷会检測到多网卡,断开网络,所以不得不禁用 v ...

  3. Linux下搜索文件find、which、whereis、locate

    Linux下搜索文件find.which.whereis.locate: - which 寻找“执行文件” - -a 将所有可找到的命令均列出,而不仅仅列出第一个找到的命令名称 - whereis 寻 ...

  4. centos7上修改运行级别

    查看运行级别的原配置文件,和centos6上明显的不同: 运行级别控制文件: [root@nginx1 python]# ll /etc/systemd/system/default.targetlr ...

  5. css 横线中间添加文字

      demoline01.02选一个用足够了 <style> .demo_line_01 { width: 200px;/*这指的是文字的宽度*/ padding: 0 20px 0; m ...

  6. delphi ---ttoolbar,ttoolbutton

    1.button style:tbsButton,tbsCheck,tbsDivider,tbsDropDown,tbsSeparator,tbsTextButton tbsButton:普通的控件 ...

  7. Spring 的IOC容器之XML方式

    1. Spring 入门 1.1 概述 Spring 是一个分层的 JavaEE 轻量级开源框架; Spring 的核心是控制反转(IOC)和面向切面(AOP); 1.2 特点 方便解耦,简化开发; ...

  8. Python简单实现邮件群发

    Python简单实现邮件群发 import smtplib from email.mime.text import MIMEText from email.utils import formatadd ...

  9. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  10. Flask(5)- Flask-Session组件、WTForms组件、数据库连接池(POOL)

    一.Flask-Session 我们使用过flask内置的session,知道它是把session存放在浏览器,即客户端.今天要学习的flask-session是flask的第三方组件,看一下它和fl ...