import java.util.Stack; import java.util.StringTokenizer; import java.util.Scanner; public class PostFixCalculator { protected Stack stack; protected Scanner scan; protected StringTokenizer tokenizer; public PostFixCalculator() { stack = new Stack(); scan = new Scanner(System.in); tokenizer = null; } public void greeting() { System.out.print("Hello, I am a post-fix calculator. Give me expressions in" + "\npost-fix notation and I will compute the results."); } public boolean enterExpression() { System.out.print("\nEnter an expression (return to exit): "); tokenizer = new StringTokenizer(scan.nextLine()); if (tokenizer.hasMoreTokens()) return true; return false; } public double getResult() { stack.clear(); while(tokenizer.hasMoreTokens()) { stack.push(tokenizer.nextToken()); } return getExpr(); } private double getExpr() { String op = stack.pop(); double a; double b; if (op.equals("+")) { a = getExpr(); b = getExpr(); return a + b; } else if (op.equals("*")) { a = getExpr(); b = getExpr(); return a * b; } else if (op.equals("-")) { a = getExpr(); b = getExpr(); return b - a; } else return Double.valueOf(op); } public static void main(String[] args) { PostFixCalculator pfc = new PostFixCalculator(); pfc.greeting(); while (pfc.enterExpression()) { System.out.print("The result is " + pfc.getResult() + ".\n"); } System.out.print("Goodbye."); } }