import java.util.Stack; import java.util.EmptyStackException; import java.util.Scanner; import javax.swing.*; class Arithmetic { Stack stk; String expression, postfix; int length; Arithmetic(String s) { expression = s; postfix = ""; length = expression.length(); stk = new Stack(); } // Validate the expression - make sure parentheses are balanced boolean isBalance() { try { stk.clear(); for(int i=0; i= currentPrecedence) { return true; } else { return false; } } String getPostfix() { stk.clear(); Scanner scan = new Scanner(postfix); while(scan.hasNext()) { String token = scan.next(); char currentChar = token.charAt(0); if(isNumber(token)) { stk.push(token); } else if(isOperator(currentChar)) { int t1 = 0, t2 = 0; try { t1 = Integer.parseInt((String)stk.pop()); t2 = Integer.parseInt((String)stk.pop()); } catch(EmptyStackException e) { return "The expression was invalid!"; } int t3 = 0; switch(currentChar) { case Constants.ADD: t3 = t2 + t1; break; case Constants.SUB: t3 = t2 - t1; break; case Constants.MULT: t3 = t2 * t1; break; case Constants.DIV: t3 = t2 / t1; break; } stk.push(new Integer(t3).toString()); } } if(stk.size() == 1) { return stk.pop().toString(); } else { String val = ""; try { while(true) { val = val + stk.pop().toString(); } } catch(EmptyStackException e) { return val; } } } }