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. Java逍遥游记读书笔记<三>

    异常处理 如何判断一个方法中可能抛出异常 该方法中出现throw语句 该方法调用了其他已经带throws子句的方法. 如果方法中可能抛出异常,有两种处理方法: 1.若当前方法有能力处理异常,则用Try ...

  2. 在系统重装后为什么ChemDraw用不了

    作为一款非常受欢迎的化学绘图软件ChemDraw需要在满足运行条件的电脑上运行,但是一些用户发现自己在给自己的电脑重装系统之后,ChemDraw运行不了呢.导致ChemDraw用不了的原因比较多样,不 ...

  3. Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)

    本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...

  4. Java中匿名内部类

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...

  5. 61、常规控件(4)TabLayout-便捷实现标签

    <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width=&q ...

  6. Kotlin——高级篇(二):高阶函数详解与标准的高阶函数使用

    在上面一个章节中,详细的讲解了Kotlin中关于Lambda表达式的语法以及运用,如果还您对其还不甚理解,请参见Kotlin--高级篇(一):Lambda表达式详解.在这篇文章中,多次提到了Kotli ...

  7. tsinsen A1333. 矩阵乘法

    题目链接:传送门 题目思路:整体二分(二分的是答案,附带的是操作) 把矩阵中的元素对应成插入操作,然后就有插入和询问操作. 然后根据插入操作对于答案的影响,询问操作所匹配的符合答案个数,将操作分为两段 ...

  8. Oracle Instant Client的安装和使用

    转自:https://www.cnblogs.com/chinalantian/archive/2011/09/09/2172145.html 根据自己需求到Oracle网站(http://www.o ...

  9. Scrapy命令和备注

    Scrapy命令和备注 1.创建一个新项目(命令行) project是项目名 scrapy startproject <project_name> 2.调试项目(pycharm) 在pyc ...

  10. cocos2d游戏开发,常用工具集合

    位图字体工具Bitmap Font ToolsBMFont (Windows)FonteditorGlyph DesignerHieroLabelAtlasCreator 粒子编辑工具Particle ...