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