-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEvaluate142.java
35 lines (33 loc) · 1.17 KB
/
Evaluate142.java
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
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
import java.util.Stack;
//Dijkstra’s Two-Stack Algorithm for Expression Evaluation
public class Evaluate142 {
public static void main(String[] args) {
Stack<String> ops = new Stack<>();
Stack<Double> vals = new Stack<>();
while (!StdIn.isEmpty()) {
String s = StdIn.readString();
switch (s) {
case "(" -> {
}
case "+", "-", "*", "/", "sqrt" -> ops.push(s);
case ")" -> {
String op = ops.pop();
double v = vals.pop();
v = switch (op) {
case "+" -> vals.pop() + v;
case "-" -> vals.pop() - v;
case "*" -> vals.pop() * v;
case "/" -> vals.pop() / v;
case "sqrt" -> Math.sqrt(v);
default -> v;
};
vals.push(v);
}
default -> vals.push(Double.parseDouble(s));
}
}
StdOut.println(vals.pop());
}
}