张天钰 内大计算机学院,20175305张天钰Java结对编程四则运算

Java结对编程四则运算

一.题目描述:如何对表达式进行求值运算呢

1、中缀表达式与后缀表达式(娄老师讲解)

中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运算数后面的表达式,比如1 2 +。为什么要讲后缀表达式呢?因为电脑运算后缀表达式会比中缀表达式方便很多。那么如何运算后缀表达式呢?

举个例子:计算9+(3-1)*3+6/2,转换为后缀表达式即为9 3 1 - 3 * + 6 2 / +(怎么转换后面再讲)。计算规则就是建立一个空栈,遇到数字就入栈,遇到符号就以符号前面的两个数为运算数进行计算。

2、中缀表达式转换为后缀表达式

法则:

如果遇到数字,我们就直接将其输出。

如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。

如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。

如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。

如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

二.需求分析。

要随机产生规定数量的式子。

要对分式进行计算。

要支持多语言。

要自动判断对错。

三.设计思路

确定要选用的语言;

要产生随机数;

在产生随机数的时候就要产生随机的运算符;

在产生数字与运算符时最后一个数字之后就不能再产生运算符(运算符的数量始终比数字少1);

在一个式子中要多次产生随机数与运算符因此要用到循环;

在循环结束时就产生了一个式子就要求进行计算与输入;

在产生中缀的式子后要将其转化为后缀;

在输入完之后就要判断对错,统计正确率;

四.代码编译

public String calculate(ArrayList postOrder)throws IOException {

Stack stack = new Stack();

//ArrayList 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;

}

20175305张天钰Java结对编程四则运算(二)

Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...

Java结对编程四则运算一周小结

Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...

20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)

结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...

结对编程--四则运算(Java)萧英杰 夏浚杰

结对编程--四则运算(Java)萧英杰 夏浚杰 Github项目地址 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目 ...

结对编程--四则运算(Java)梅进鹏 欧思良

结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ...

王译潇20162314 实验报告三plus结对编程四则运算第一阶段

北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162314 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年5月12号 实验密级: 非 ...

Java结对编程之挑战出题

Java结对编程之挑战出题 需求分析 需求 对于挑战出题来说最主要的就是要产生的式子并将重复的式子去掉. 设计思路 具体的思路: 思路一: 原先我打算用集合中的元素的不重复性进行去重,这种思路的好处就 ...

结对编程-四则运算生成器&lpar;java实现&rpar;

结对伙伴:陈振华  项目要求 1.题目:实现一个自动生成小学四则运算题目的命令行程序. 2.需求: 1. 使用 -n 参数控制生成题目的个数 2. 使用 -r 参数控制题目中数值(自然数.真分数和真 ...

结对编程 四则运算(java)(胡大华 黄绪明)

Github项目地址 https://github.com/yogurt1998/Myapp 项目需求 题目: 实现一个自动生成小学四则运算题目的命令行程序 功能 1.使用-n 参数控制生成题目的个数 ...

随机推荐

单核 -512M内存-2000并发正常使用

自从自己创业以后就很少写博客了,也许是太忙了.也许是无法静下心好好研究一个东西.今天把我们做的后台做了下压力测试.结果还可以,尤其是对于我这种从java转过来土人. 4年前看到一篇抨击java的文章 ...

Json-转换

js转换 引用json.js(将json格式转换成字符串 var name = document.getElementById("name").value; var retries ...

c&plus;&plus; string 拼接 int错误

程序中用到字符串和int合成字符串,受java习惯的影响,直接进行了字符串与int的+操作,结果不正确.查了一下才明白问题所在,记录一下string str=”abc”+1;输出为:bc,因为”abc ...

SKTextureAtlas类

继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用 ...

Javascript 文件的同步加载与异步加载

HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer: boolean, 可选.延迟脚本执行,相当于将script标签放入页面b ...

使用自定义脚本扩展程序自动执行 VM 自定义任务

 在 Build 开发者大会上推出VM 扩展程序的其中一个称为"自定义脚本扩展程序",它支持 PowerShell.如果这是您第一次访问这些博客,可能需要查看以前的博客,请单击 ...

Linux配置防火墙端口 8080端口

1.查看防火墙状态,哪些端口开放了 /etc/init.d/iptables status 2.配置防火墙 vi /etc/sysconfig/iptables   ################# ...

通过Obfuscated ssh避免时不时ssh连接不畅的问题【转】

众所周知的原因,为了能流畅的使用google.使用某些“不存在”的网站,我们一般都是需要通过某些不方便光明正大说明使用用途的技术.比如通过ssh tunnel,这是最简单的,也是用得最多的. 不过,这 ...

四&comma;ESP8266 TCP服务器&lpar;基于Lua脚本语言&rpar;

我要赶时间赶紧写完所有的内容....朋友的东西答应的还没做完呢!!!!!!!没想到又来了新的事情,,....... 配置模块作为TCP服务器然后呢咱们连接服务器发指令控制LED亮灭 控制的指令呢咱就配 ...

JavaScript中逗号运算符

JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值