package com.coding.basic.stack.expr;
import com.coding.basic.stack.Stack;
import com.coding.basic.stack.expr.util.ExprIterator;
import com.coding.basic.stack.expr.util.FixExprUtil;
import com.coding.basic.stack.expr.util.Operator;
public class PostfixExpr {
String expr = null;
public PostfixExpr(String expr) {
this.expr = expr;
}
public float evaluate() {
//数据栈
Stack<Float> dataStack = new Stack<>();
parseExpr(dataStack,null);
return dataStack.peek();
}
/**
* 解析表达式
* @return
*/
private void parseExpr(Stack<Float> dataStack,Stack<Operator> operStack) {
ExprIterator it = new ExprIterator(expr);
float a,b,res;
while(it.hasNext()){
String element = it.next();
if (Operator.contains(element)) {
b = dataStack.pop();
a = dataStack.pop();
res = FixExprUtil.calculate(a, Operator.getOperator(element), b);
dataStack.push(res);
} else {
dataStack.push(Float.parseFloat(element));
}
}
}
}