实现Linux下dc的功能,计算后缀表达式的值
2017-05-31 18:25
447 查看
提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值
-将运算符写在两个操作数之后的表达式称为“后缀表达式”,如上面的中缀表达式可转换为后缀表达式1 2 3 4 - * + 5 +。后缀表达式中没有括号,而且运算符没有优先级。后缀表达式的求值过程能够严格地从左到右按顺序进行,符合运算器的求值规律。应注意的问题;
-老师主要是想考察课上是否听懂了,并且检验我们的实际动手编程能力。在课堂是是听懂了老师所说的课程,虽然没有编写出相应的代码,但也回来及时将博客补上,并且对代码进行了了解。
-优先级问题;
-入栈,出栈顺序参考PPT
老师给出的代码(不完整)
mport java.util.StringTokenizer; import java.util.Stack; public class MyDC { /** * constant for addition symbol */ private final char ADD = '+'; /** * constant for subtraction symbol */ private final char SUBTRACT = '-'; /** * constant for multiplication symbol */ private final char MULTIPLY = '*'; /** * constant for division symbol */ private final char DIVIDE = '/'; /** * the stack */ private Stack<Integer> stack; public MyDC() { stack = new Stack<Integer>(); } public int evaluate(String expr) { int op1, op2, result = 0; String token; StringTokenizer tokenizer = new StringTokenizer(expr); while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); //如果是运算符,调用isOperator if () { //从栈中弹出操作数2 //从栈中弹出操作数1 //根据运算符和两个操作数调用evalSingleOp计算result; //计算result入栈; } else//如果是操作数 stack.push(new Integer(Integer.parseInt(token))); //操作数入栈; } return result; } private boolean isOperator(String token) { return (token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/")); } private int evalSingleOp(char operation, int op1, int op2) { int result = 0; switch (operation) { case ADD: result = op1 + op2; break; case SUBTRACT: result = op1 - op2; break; case MULTIPLY: result = op1 * op2; break; case DIVIDE: result = op1 / op2; } return result; } }
-MyDCTester
import java.util.Scanner; public class MyDCTester {public static void main (String[] args) { String expression, again; int result; try { Scanner in = new Scanner(System.in); do { MyDC evaluator = new MyDC(); System.out.println("Enter a valid postfix expression: "); expression = in.nextLine(); result = evaluator.evaluate(expression); System.out.println(); System.out.println("That expression equals " + result); System.out.print("Evaluate another expression [Y/N]? "); again = in.nextLine(); System.out.println(); } while (again.equalsIgnoreCase("y")); } catch (Exception IOException) { System.out.println("Input exception reported"); } } }
dc
dc 命令是一个任意精度的算术计算器。dc 命令从 File 参数或者标准输入得到其输入直到它读到一个文件结束符。一旦 dc 命令接收到输入,它将求出计算值并将计算值写入到标准输出当中。它按十进制整数计算,但是您可以指定输入和输出的基数,以及小数部分保留的位数。dc 命令结构如同一个堆栈、逆波兰表示法计算。考点:
考课堂上刚讲的入栈和弹栈
补充代码如下
while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); //如果是运算符,调用isOperator if (isOperator(token)==true) { op2=stack.pop(); op1=stack.pop(); //从栈中弹出操作数2 //从栈中弹出操作数1 result=evalSingleOp(token.charAt(0),op1,op2); //根据运算符和两个操作数调用evalSingleOp计算result; stack.push(result); //计算result入栈; } else//如果是操作数 { stack.push(Integer.parseInt(token)); } //操作数入栈; }
运行结果:
码云链接
相关文章推荐
- C++实现计算器功能(包括计算含未知量的式子),输出后缀表达式
- Qt计算器开发(一):后缀表达式实现完整数学表达式的计算
- 堆栈实现中缀表达式转后缀表达式及计算表达式的值
- Java实现中缀表达式转后缀表达式并计算结果
- C语言实现括号匹配,中缀表达式转后缀表达式并计算的算法
- 堆栈实现,计算后缀表达式
- 【数据结构】用栈实现对后缀表达式的计算
- 数据结构实现中缀表达式到后缀表达式,再到计算出结果的代码
- 后缀表达式计算的代码实现
- 栈 实现 中缀表达式 转换成 后缀表达式 并 计算
- 使用堆栈计算后缀表达式--java实现
- java实现中缀表达式转后缀表达式并且计算
- 栈实现后缀表达式的计算
- java实现中缀表达式转后缀表达式并且计算
- java实现中缀表达式转后缀表达式并且计算
- 利用数组模拟栈实现简单的表达式中缀转后缀并进行计算
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- PHP实现基于栈的后缀表达式求值功能