Dijkstra's two-stack algorithm
Algorithm
Code
public class Evaluate {
public static void main(String[] args) {
Stack<String> operations = new Stack<>();
Stack<Double> values = new Stack<>();
String expr = "( 1 + ( 5 * ( 4 * 5 ) ) )";
String[] tokens = expr.split(" ");
for (String str : tokens)
switch (str) {
case "+":
case "*":
operations.push(str);
break;
case "(":
break;
case ")":
String op = operations.pop();
if (op.equals("+")) {
values.push(values.pop() + values.pop());
} else if (op.equals("*")) {
values.push(values.pop() * values.pop());
}
break;
default:
if (!str.equals("")) values.push(Double.parseDouble(str));
break;
}
System.out.println(values.pop());
}
}Last updated