package basic.dataStructure.stack.expr; import basic.dataStructure.stack.Stack; import java.util.List; /** * 后序表达式 */ public class PostfixExpr { String expr = null; /** * 23*21-/341-*+ */ public PostfixExpr(String expr) { this.expr = expr; } public float evaluate() { List<Token> tokens = TokenParser.parse(expr); Stack numbers = new Stack(); Stack opers = new Stack(); for(Token t : tokens){ if(t.isNumber()) numbers.push(t); if(t.isOperator()) opers.push(t); if(opers.size() == 1){ float num1 = ((Token)numbers.pop()).getFloatValue(); float num2 = ((Token)numbers.pop()).getFloatValue(); String oper = (opers.pop()).toString(); float res = Calculator.getFloat(num1, num2, oper); numbers.push(new Token(Token.NUMBER, res + "")); } } return ((Token) numbers.pop()).getFloatValue(); } }