四则运算表达式求值
两个要点
1.中缀表达式转后缀表达式
2.后缀表达式求值
中缀表达式转后缀表达式
从左到右遍历中缀表达式的每个数字和符号.
若是数字就输出,成为后缀表达式的一部分.
若是符号则判断其与栈顶符号的优先级,是右括号或者优先级低于等于栈顶符号,则栈顶元素依次出栈并输出,再将当前的符号进栈。一直到最终输出后缀表达式为止。
后缀表达式求值
从左至右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就弹出栈顶两个元素运算,再将运算结果入栈。一直到最终获得结果。
jdk 1.7+
- "9 + ( 3 - 1 ) * 3 + 10 / 2";
- System.out.println(calc(target));
- }
-
- // 中缀表达式转后缀表达式
- " ");
-
- ")":
- "(")) {
- '(')) {
- result.addLast(ele);
- }
- }
- "(":
- stack.addFirst(c);
- "+":
- "-":
- "*") || ele.equals("/") || ele.equals("+") || ele.equals("-")) {
- result.addLast(stack.removeFirst());
- } "*":
- "/":
- stack.addFirst(c);
- "*") || ele.equals("/") || ele.equals("+") || ele.equals("-")) {
- Float f1 = result.removeFirst();
- Float f2 = result.removeFirst();
- "+":
- result.addFirst(f2 + f1);
- "-":
- result.addFirst(f2 - f1);
- "*":
- result.addFirst(f2 * f1);
- "/":
- result.addFirst(f2 / f1);
- break;
- }
- } else {
- result.addFirst(Float.valueOf(ele));
- }
- }
- return result.removeFirst();
- }
- }
结果:
[9, 3, 1, -, 3, *, +, 10, 2, /, +]
20.0
0