以表达式"(1+((2+3)*(4*5)))"为例:
算法分四个步骤:
处理完最后一个右括号后,操作数栈中只剩下一个数,就是表达式的值。
public class expression {
public static void main(String[] args) {
Stack<Character> ops = new Stack<Character>();//运算符栈
Stack<Integer> vals = new Stack<Integer>();//操作数栈
String str = "(1+((2+3)*(4*5)))";
for(int i=0;i<str.length();i++) {
char ch = str.charAt(i);
if(ch == '(');//忽略左括号
else if(ch == '+' || ch == '-' || ch == '*' || ch =='/') ops.push(ch);//操作数压入操作数栈
else if(ch == ')') {
char op = ops.pop();
int v = vals.pop();
if(op == '+') v = vals.pop() + v;
if(op == '-') v = vals.pop() - v;
if(op == '*') v = vals.pop() * v;
if(op == '/') v = vals.pop() / v;
vals.push(v);
}
else vals.push(Integer.parseInt(String.valueOf(ch)));//运算符压入运算符栈
}
System.out.println(vals.pop());
}
}