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