package com.nps.base.xue.DataStructure.stack.utils;

import java.util.Scanner;
import java.util.Stack; /*
* @author XueWeiWei
* @date 2019/7/7 9:02
*/
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; /**
* 创建一个 evaluator
*/ 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(new Integer(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 evaluateSingleOperator(char operator, int op1 , int op2){
int result = 0; switch (operator){
case ADD:
result = op1 + op2;
break;
case SUBTRACT:
result = op1- op2;
break;
case MULTIPLY:
result = op1 * op2;
break;
case DIVIDE:
result = op1 / op2;
break;
} return result;
}
}

  

package com.nps.base.xue.DataStructure.stack.test;

import com.nps.base.xue.DataStructure.stack.utils.PostfixEvaluator;

import java.util.Scanner;

/*
* @author XueWeiWei
* @date 2019/7/7 9:01
*/
public class PostfixTester {
public static void main(String[] args) {
String expression,again;
int result; Scanner in = new Scanner(System.in); do {
PostfixEvaluator evaluator = new PostfixEvaluator();
System.out.println("e.g. 5 4 + 3 2 1 - + *");
System.out.println();
expression = in.nextLine(); System.out.println("输入的表达式:" + expression);
result = evaluator.evaluate(expression);
System.out.println(">>>>>结果: " + result); System.out.println("是否输入下一个表达式?[Y/N]");
again = in.nextLine(); }while (again.equalsIgnoreCase("y"));
}
}

  

最新文章

  1. 实例讲解 SQL 注入攻击
  2. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q109-Q111)
  3. FPGA重要设计思想
  4. 详细说说 Google Test Certified 的各级——Level 2,3
  5. ipython又一方便的调试和应用工具!!!
  6. IPFS搭建分布式文件系统 - 访问控制
  7. Android Touch事件传递机制解析 (推荐)
  8. VS 2013 EFSQLITE
  9. Netty4.x中文教程系列(三) ChannelHandler
  10. [RxJS] just, return
  11. hdu 1403 Longest Common Substring(最长公共子字符串)(后缀数组)
  12. 走进C标准库(3)——&quot;stdio.h&quot;中的getc和ungetc
  13. CentOS/RedHat rpm方式安装Apache2.2
  14. android 广播,manifest.xml注册,代码编写
  15. go http
  16. error: 40 - 无法打开到 SQL Server 的连接
  17. Groovy&amp;开发环境
  18. Python2.7-内置类型
  19. Python练习环境搭建-引入预定义数据
  20. IIS 7.5: HOW TO ENABLE TLS 1.1 AND TLS 1.2

热门文章

  1. 手动实现一个 IOC/DI 容器
  2. 从Excel到Python 数据分析进阶指南
  3. zphp源码分析(一)
  4. Singleton and Prototype Bean Scope in Spring
  5. Android 上传开源项目到 jcenter 实战踩坑之路
  6. centos6.5虚拟机配置Nat模式连接外网
  7. centos crontab用法详解 定时任务的设置
  8. 统计学习方法9—EM算法
  9. 基础数据类型,格式化输出,以及for循环的使用
  10. InstallShield 2018 打包安装