1 import java.util.Scanner;
2
17 public class UPNStack {
18 public static void main(String[] args) {
19 Scanner scanner = new Scanner(System.in);
20
21 int[] stack;
22
23 stack = emptystack(10);
25 while (scanner.hasNext()) {
26
27 if (scanner.hasNextInt()) {
28
29 int zahl = scanner.nextInt();
30
31 if (! offerfirst(stack, zahl) ) System.out.println("Stack ist bereits voll");
33 }
34
35 else {
36
37 String s = scanner.next();
38 char operation = s.charAt(0);
40 int operand2 = pollfirst(stack); int operand1 = pollfirst(stack); int ergebnis;
43
44 switch ( operation) {
45
46 case '+': ergebnis = operand1 + operand2;
47 break;
48
49 case '-': ergebnis = operand1 - operand2;
50 break;
51
52 case '*': ergebnis = operand1 * operand2;
53 break;
54
55 case '/': ergebnis = operand1 / operand2;
56 break;
57
58 case '%': ergebnis = operand1 % operand2;
59 break;
60
61 default: System.out.println("keine gültige Operation");
62 ergebnis = -999999;
63 }
64
65 System.out.println("=" + ergebnis);
66
67 offerfirst(stack, ergebnis); }
69
70 }
71
72 }
73
74
77 private static int[] emptystack(int capacity) {
78 int[] r ;
79 r = new int[capacity + 1]; return r;
81 }
82
83
86 private static boolean isempty(int[] stack) {
87 return (stack[0] == 0); }
89
90
93 private static int size(int[] stack) {
94 return stack[0];
95 }
96
97
100 private static boolean offerfirst(int[] stack, int number) {
101 int i = stack[0];
103 if (i == stack.length-1) return false;
105
106 i++;
108 stack[i] = number;
110 stack[0] = i;
111 return true;
112 }
113
114
117 private static int pollfirst(int[] stack) {
118 int i = stack[0];
120 if (i == 0) return -999999;
122
123 int number = stack[i];
125 i--;
127 stack[0] = i;
128 return number;
129 }
130
131 }
132