后缀表达式 Java实现

基本原理:

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

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

 

 

算法代码:

 1     public class PostfixEvaluator{
 2         private final static char ADD = '+';
 3         private final static char SUBTRACT = '-';
 4         private final static char MULTIPLY = '*';
 5         private final static char DIVIDE = '/';
 6         
 7         private Stack<Integer> stack;
 8         
 9         public PostfixEvaluator() {
10             stack = new Stack<Integer>();
11         }
12         
13         public int evaluate(String expr) {
14             int op1,op2,result=0;
15             String token;
16             Scanner parser = new Scanner(expr);
17             
18             while(parser.hasNext()) {
19                 token = parser.next();
20                 
21                 if(isOperator(token)) {
22                     op2 = (stack.pop()).intValue();
23                     op1 = (stack.pop()).intValue();
24                     result = evaluateSingleOperator(token.charAt(0),op1,op2);
25                     stack.push((Integer)result);
26                 }else {
27                     stack.push(Integer.parseInt(token));
28                 }
29             }
30             return result;
31         }
32         
33         private boolean isOperator(String token) {
34             return (token.equals("+") || token.equals("-") ||
35                     token.equals("*") || token.equals("/"));
36         }
37         
38         private int evaluateSingleOperator(char operation,int op1,int op2) {
39             int result = 0;
40             switch(operation) {
41             case ADD:
42                 result = op1+op2;
43                 break;
44             case SUBTRACT:
45                 result = op1-op2;
46                 break;
47             case MULTIPLY:
48                 result = op1*op2;
49                 break;
50             case DIVIDE:
51                 result = op1/op2;
52             }
53             return result;
54         }
55     }

 

转载于:https://www.cnblogs.com/ShadowCharle/p/11167043.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值