package task7.expr;
import task5.stack.Stack;
import java.util.List;
public class PostfixExpr {
private String expr = null;
private Stack<Float> numberStack = new Stack<>();
public PostfixExpr(String expr) {
this.expr = expr;
}
public float evaluate() {
List<Token> parse = new TokenParser().parse(expr);
for (int i = 0; i < parse.size(); i++) {
Token token = parse.get(i);
// 后缀表达式:从左向右遍历 遇到操作数入栈,遇到操作符弹出操作数栈的两个数计算再入栈
if (token.isNumber())
numberStack.push((float) token.getIntValue());
else
numberStack.push(cal(token.toString(), numberStack.pop(), numberStack.pop()));
}
/*while (!operatorStack.isEmpty()) {
numberStack.push(cal(operatorStack.pop(), numberStack.pop(), numberStack.pop()));
}*/
return numberStack.peek();
}
private static float cal(String operator, float var1, float var2) {
switch (operator) {
case "+":
return var2 + var1;
case "-":
return var2 - var1;
case "*":
return var2 * var1;
case "/":
return var2 / var1;
}
return -1;
}
}