建立两个栈,一个用来存放表达式中的运算符号,一个用来存放表达式中的值。
遍历表达式,遇到左括号不做处理,遇到值放入 vals 栈中,遇到符号放到 ops 栈中。
当遇到右括号时,取出 ops 栈中的符号对 vals 栈中弹出的两个值进行运算,运算结果压入到 vals 栈中。
public class Evaluate
{
public static void main(String[] args)
{
String expression = "(1+((2+3)*(4*5)))";
System.out.println(expression);
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
for(int i = 0; i < expression.length(); i++)
{
String s = expression.substring(i, i+1);
if (s.equals("("));
else if (s.equals("+")) ops.push(s);
else if (s.equals("*")) ops.push(s);
else if (s.equals(")"))
{
String op = ops.pop();
if (op.equals("+")) vals.push(vals.pop() + vals.pop());
else if (op.equals("*")) vals.push(vals.pop() * vals.pop());
}
else vals.push(Double.parseDouble(s));
}
System.out.println(vals.pop());
}
}
参考
https://class.coursera.org/algs4partI-010/lecture/23