package com.coding.basic.stack.expr; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class PostfixExpr { String expr = null; int count; ArrayList operator = new ArrayList(); Stack numStack = new Stack(); public PostfixExpr(String expr) { this.expr = expr; } public float evaluate() { operator.add('+'); operator.add('-'); operator.add('*'); operator.add('/'); this.count = 0; char[] exprs = this.expr.toCharArray(); while (count < exprs.length) { if (operator.contains(exprs[count])) { switch (exprs[count]) { case '+': add(); break; case '-': subtract(); break; case '*': multiply(); break; case '/': divide(); break; } this.count++; } else if (exprs[count] == ' ') { this.count++; } else { int num = getNum(exprs); numStack.push(num); } } int result = (int)numStack.pop(); return result; } private int getNum(char[] exprs) { int num = exprs[count]-'0'; this.count++; while (exprs[count] >= '0' && exprs[count] <= '9') { num *= 10; num += exprs[count]-'0'; this.count++; } return num; } private void add() { int a = (int) numStack.pop(); int b = (int) numStack.pop(); numStack.push(a + b); } private void subtract() { int a = (int) numStack.pop(); int b = (int) numStack.pop(); numStack.push(b - a); } private void multiply() { int a = (int) numStack.pop(); int b = (int) numStack.pop(); numStack.push(b * a); } private void divide() { int a = (int) numStack.pop(); int b = (int) numStack.pop(); numStack.push(b / a); } }