1 import java.util.Scanner;
2 import java.util.Stack;
3
4 /**
5 This calculator uses the reverse polish notation.
6 */
7 public class Calculator
8 {
9 public static void main(String[] args)
10 {
11 Scanner in = new Scanner(System.in);
12 Stack<Integer> results = new Stack<Integer>();
13 System.out.println("Enter one number or operator per line, Q to quit. ");
14 boolean done = false;
15 while (!done)
16 {
17 String input = in.nextLine();
18
19 // If the command is an operator, pop the arguments and push the result
20
21 if (input.equals("+"))
22 {
23 results.push(results.pop() + results.pop());
24 }
25 else if (input.equals("-"))
26 {
27 Integer arg2 = results.pop();
28 results.push(results.pop() - arg2);
29 }
30 else if (input.equals("*") || input.equals("x"))
31 {
32 results.push(results.pop() * results.pop());
33 }
34 else if (input.equals("/"))
35 {
36 Integer arg2 = results.pop();
37 results.push(results.pop() / arg2);
38 }
39 else if (input.equals("Q") || input.equals("q"))
40 {
41 done = true;
42 }
43 else
44 {
45 // Not an operator--push the input value
46
47 results.push(Integer.parseInt(input));
48 }
49 System.out.println(results);
50 }
51 }
52 }