-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRPNAddSubHotFix.java
More file actions
44 lines (42 loc) · 1.28 KB
/
RPNAddSubHotFix.java
File metadata and controls
44 lines (42 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.LinkedList;
public class RPNAddSubHotFix {
// @include
public static int eval(String RPNExpression) {
LinkedList<Integer> intermediateResults = new LinkedList<>();
String delimiter = ",";
String[] symbols = RPNExpression.split(delimiter);
for (String token : symbols) {
if (token.length() == 1 && "+-".contains(token)) {
int y = intermediateResults.pop();
int x = intermediateResults.pop();
switch (token.charAt(0)) {
case '+':
intermediateResults.push(x + y);
break;
case '-':
intermediateResults.push(x - y);
break;
default:
throw new IllegalArgumentException("Malformed RPN at :" + token);
}
} else { // token is a number.
intermediateResults.push(Integer.parseInt(token));
}
}
return intermediateResults.pop();
}
// @exclude
public static void main(String[] args) {
assert (-5 == eval("5,10,-"));
assert (6 == eval("-10,-16,-"));
assert (12 == eval("10,2,+"));
assert (15 == eval("1,2,+,3,4,*,+"));
assert (42 == eval("1,2,3,4,5,+,*,+,+,3,4,*,+"));
try {
eval("-10,-2,/");
assert(false);
} catch (IllegalArgumentException e) {
assert(true);
}
}
}