基本原理:

  从左到右扫描字符串:1、是操作数:压栈。  2、是操作符:出栈两个操作数,将运算结果压栈。

扫描字符串通过java.util.Scanner类实现,其next方法可以读取以空格(默认)或指定符号分割的元素。

算法代码:

     public class PostfixEvaluator{
private final static char ADD = '+';
private final static char SUBTRACT = '-';
private final static char MULTIPLY = '*';
private final static char DIVIDE = '/'; private Stack<Integer> stack; public PostfixEvaluator() {
stack = new Stack<Integer>();
} public int evaluate(String expr) {
int op1,op2,result=0;
String token;
Scanner parser = new Scanner(expr); while(parser.hasNext()) {
token = parser.next(); if(isOperator(token)) {
op2 = (stack.pop()).intValue();
op1 = (stack.pop()).intValue();
result = evaluateSingleOperator(token.charAt(0),op1,op2);
stack.push((Integer)result);
}else {
stack.push(Integer.parseInt(token));
}
}
return result;
} private boolean isOperator(String token) {
return (token.equals("+") || token.equals("-") ||
token.equals("*") || token.equals("/"));
} private int evaluateSingleOperator(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;
}
}

最新文章

  1. yum安装php,php-fpm
  2. JS魔法堂:ASI(自动分号插入机制)和前置分号
  3. 让script的type属性等于text/html
  4. JS 概述
  5. OK335xS Qt network hacking
  6. ios 经典错误
  7. 解决ubuntu 里面vi的时候上下左右是ABCD删除也不起作用
  8. ZOJ 3699 Dakar Rally(贪心)
  9. jdk8的新特性 Lambda表达式
  10. 识别图片中文字(百度AI)
  11. openSUSE虚拟机安装并连接Xshell
  12. 微信小程序开发编程手记20190303
  13. Python3创建项目时创建了一个叫做“keyword&quot;的包,运行项目时报ImportError: cannot import name &#39;iskeyword&#39;错误
  14. missing 1 required positional argument: &#39;on_delete&#39;报错解决方案
  15. SQL Server2012中如何通过bak文件还原SQL Server2012数据库
  16. HTML常用标签1
  17. 13、spark-submit
  18. 一些关于SQL优化的总结
  19. maven package install deploy区别
  20. 使用V$SQL_PLAN视图获取曾经执行过的SQL语句执行计划

热门文章

  1. VMware Workstation创建Windows2012server虚拟机
  2. [PHP] layui实现多图上传,图片自由排序,自由删除
  3. vue监听当前页面的地址变化/路由变化
  4. salt 安装
  5. 安装OpenIMSCore的SIP测试客户端 utcimsclient
  6. Java基础之十三 字符串
  7. svn在cleanup 时,提示privious operation has not finished,解决方案
  8. 【操作系统之九】Linux常用命令之netstat
  9. MySQL常见的应用异常记录
  10. Scrum story