输入是一个表达式,比如说是1*2-3+4*5,要求计算出这个表达式的值。
思路:不瞻前,只顾后。
在计算的时候,如果当前运算符是乘除法,则直接计算出来,再考虑后续的。如果当前的操作符不是乘除,则“顾后”,查看后面的操作符是不是乘除法,如果是乘除法,则计算乘除法,否则把当前的加减法计算出来,再计算后续的。
- package InnerClass;
- public class TT {
- public static void main(String ss[]) {
- String s = "1+2*3*4+5";
- System.out.println(calculate(s.toCharArray()));
- }
- private static double calculate(char[] expr) {
- double c1 = Double.parseDouble(expr[0] + "");
- double c2 = Double.parseDouble(expr[2] + "");
- int index = 3;
- char op = expr[1];
- while (index < expr.length) {
- if (expr[index] == '*' || expr[index] == '/') {
- // 如果是乘除法,则先计算
- c2 = cal(c2, Double.parseDouble(expr[index + 1] + ""),
- expr[index]);
- } else {
- // 如果不是乘除法,则计算出来结果
- c1 = cal(c1, c2, op);
- op = expr[index];
- c2 = Double.parseDouble(expr[index + 1] + "");
- }
- index += 2;
- }
- return cal(c1, c2, op);
- }
- private static double cal(double a, double b, char op) {
- switch (op) {
- case '+':
- return a + b;
- case '-':
- return a - b;
- case '*':
- return a * b;
- case '/':
- return a / b;
- }
- return -1;
- }
- }