import java.util.Stack;
public class Calculator {
public static void main(String[] args) {
Stack<Character> ops = new Stack<Character>();
Stack<Double> vals = new Stack<Double>();
/*输入要求的算式*/
String a = "(1+((2+3)*(4*5)))";
char m;
for(int i = 0;i<a.length();i++){
m = a.charAt(i);
System.out.println(m);
switch (m) {
case '(': break;
case '+': ops.push(m);
break;
case '-': ops.push(m);
break;
case '*': ops.push(m);
break;
case '/': ops.push(m);
break;
case ')': char op = ops.pop();
double v = vals.pop();
switch (op){
case '+': v = vals.pop()+v;
break;
case '-': v = vals.pop()-v;
break;
case '*': v = vals.pop()*v;
break;
case '/': v = vals.pop()/v;
break;
}
vals.push(v);
break;
default: vals.push(Double.valueOf(m)-'0');
break;
}
System.out.println(vals.toString());
System.out.println(ops.toString());
}
System.out.println(vals.pop());
}
}
输出
(
[]
[]
1
[1.0]
[]
[1.0]
[+]
(
[1.0]
[+]
(
[1.0]
[+]
2
[1.0, 2.0]
[+]
+
[1.0, 2.0]
[+, +]
3
[1.0, 2.0, 3.0]
[+, +]
)
[1.0, 5.0]
[+]
*
[1.0, 5.0]
[+, *]
(
[1.0, 5.0]
[+, *]
4
[1.0, 5.0, 4.0]
[+, *]
*
[1.0, 5.0, 4.0]
[+, *, *]
5
[1.0, 5.0, 4.0, 5.0]
[+, *, *]
)
[1.0, 5.0, 20.0]
[+, *]
)
[1.0, 100.0]
[+]
)
[101.0]
[]
101.0