package com.coding.basic.homework_06.expr; import java.util.List; import java.util.Stack; public class PostfixExpr { String expr = null; public PostfixExpr(String expr) { this.expr = expr; } public float evaluate() { TokenParser parser = new TokenParser(); List<Token> tokens = parser.parse(expr); Stack<Float> numStack = new Stack<Float>(); for(int i=0; i < tokens.size(); i++){ if(tokens.get(i).isOperator()){ float f1 = numStack.pop(); float f2 = numStack.pop(); numStack.push(getResult(f1, f2, tokens.get(i).value)); }else if(tokens.get(i).isNumber()){ numStack.push(Float.valueOf(tokens.get(i).getIntValue())); } } return numStack.pop(); } private float getResult(float float1, float float2, String operator){ if(operator.equals("+")){ return float1 + float2; }else if(operator.equals("-")){ return float2 - float1; }else if(operator.equals("*")){ return float1 * float2; }else if(operator.equals("/")){ return float2 / float1; }else{ throw new RuntimeException(operator + " is not supported"); } } }