博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20175305张天钰Java结对编程四则运算
阅读量:4601 次
发布时间:2019-06-09

本文共 4065 字,大约阅读时间需要 13 分钟。

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;}

转载于:https://www.cnblogs.com/zhangtianyu/p/10657457.html

你可能感兴趣的文章
日记(序)
查看>>
A == B ?
查看>>
洛谷P3763 [Tjoi2017]DNA 【后缀数组】
查看>>
UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)
查看>>
多种方法求解八数码问题
查看>>
spring mvc ModelAndView向前台传值
查看>>
(黑客游戏)HackTheGame1.21 过关攻略
查看>>
Transparency Tutorial with C# - Part 2
查看>>
android 文件上传
查看>>
ASCII 码表对照
查看>>
javascript的DOM操作获取元素
查看>>
Shuffle'm Up(串)
查看>>
20145219 《Java程序设计》第06周学习总结
查看>>
C# 执行bat文件并取得回显
查看>>
基于YOLO的Autonomous driving application__by 何子辰
查看>>
javascript中的继承
查看>>
iOS-如何写好一个UITableView
查看>>
如何在Objective-C中实现链式语法
查看>>
select2 下拉搜索控件
查看>>
WebAPI常见的鉴权方法,及其适用范围
查看>>