算法实现
关于算法实现我简要介绍一下,主要是利用递归的思想。
例如这个式子: “1+56/72-4”
假设计算函数为 public static double calculate( String str){}
我们先从这个字符串内寻找计算符号 例如加号
如果 找到了加号
则返回结果 calculate(“1”)+calculate(“56/72-4”)
递归终止条件为字符串内部没有符号,例如上式的 calculate(“1”)就返回 1.0
依次类推,值得注意的是减法和除法不满足结合律,需要从后往前查找符号。
优先级越高的运算应该放到越后面查找。
关于括号的实现():
优先计算括号内内容,查找最里面的括号,并计算该括号内算式的值,直到消除所有括号,把整个带括号的字符串变为不带括号的字符串为止
括号实现:
int startIndex = content.lastIndexOf("(");
// 如果不是-1,标识这个等式中有括号,继续找与之对应的右括号
if (startIndex != -1) {
// 从左括号的位置开始找,找到第一个右括号,这对括号里面一定没有括号,所以就可以交给写好的parse(Stringcontent)方法算出结果!
int endIndex = content.indexOf(")", startIndex);
double d = parse(content.substring(startIndex + 1, endIndex));
return parse(content.substring(0, startIndex) //
+ d + content.substring(endIndex + 1));
总的计算函数实现:
public static double parse(String content) {
// 找到字符串中最后一个左括号
int startIndex = content.lastIndexOf("(");
// 如果不是-1,标识这个等式中有括号,继续找与之对应的右括号
if (startIndex != -1) {
// 从左括号的位置开始找,找到第一个右括号,这对括号里面一定没有括号,所以就可以交给写好的parse(Stringcontent)方法算出结果!
int endIndex = content.indexOf(")", startIndex);
double d = parse(content.substring(startIndex + 1, endIndex));
return parse(content.substring(0, startIndex) //
+ d + content.substring(endIndex + 1));
}
int index = content.indexOf("+");
if (index != -1) {
return parse(content.substring(0, index)) + parse(content.substring(index + 1));
}
// 这里<---
index = content.lastIndexOf("-");
if (index != -1&&index !=0&