输入是一个表达式,比如说是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;
}
}