package com.coding.basic.stack.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() {
Stack<String> stack = new Stack<String>();
TokenParser parser = new TokenParser();
List<Token> tokens = parser.parse(expr);
for(Token token :tokens){
if(token.isNumber()){
stack.push(token.toString());
}
if(token.isOperator()){
int num1 = Integer.parseInt(stack.pop());
int num2 = Integer.parseInt(stack.pop());
String result = parseToResult(num1,num2,token.toString());
stack.push(result);
}
}
return Float.parseFloat(stack.pop());
}
private String parseToResult(int num1, int num2, String oper) {
// TODO Auto-generated method stub
String result = "";
if(oper.equals("*"))
result = (num1*num2)+"";
if(oper.equals("/"))
result = (num2/num1)+"";
if(oper.equals("+"))
result = (num1+num2)+"";
if(oper.equals("-"))
result = (num2-num1)+"";
return result;
}
public static void main(String[] args) {
//9+(3-1)*3+10/2
PostfixExpr pos = new PostfixExpr("9 3 1-3*+ 10 2/+");
float f =pos.evaluate();
System.out.println(f);
}
}