/**
* 混合运算
*
* 混合运算的思路:
* 通过加减乘除的先后运算顺序一步一步计算实现混合运算。
*
* 思路:
*
* 3+6*5-1
*
* 1、判断运算符所在的位置。用一个数组下标1-3装起来。下标0则是装着这个算式的运算符数量
*
* 2、通过运算符所在的的位置提取运算符。存放于数组,同样0下标为符号数量。
*
* 3、拆分算式中的数值,放到数组里面。下标0 为数值的数量。
*
* 4、通过for循环遍历每一个运算符,判断有没有乘除(运算优先级最高的运算符) 。如果有。先进行计算,如果没有,继续判断加减法。直到没有运算符,返回最终得数。(上面的算式先算乘法。)
*
* 5、通过符号,获得相对应的运算符位置。以及运算符前后的数值。将运算符以及其前后的数值放到计算方法中计算 (计算 6*5 返回30)
*
* 6、返回两个数计算完成后的得数。将未计算部分合并。 (未计算部分+结果+未计算部分:3+ 30 -1 ,组合成为一个新的算式) 返回这个算式
*
* 7、到这里完成一个循环。判断返回结果是否有运算符,如果有,回到第一步。如果没有返回最终得数。
*
* 通过result(String formula) 方法 计算混合算式。返回一个String类型的结果。
*
*/
class hybridOperation {
//定义加减乘除。注意 乘除的符号。输入的时候必须与下面的一致。最好是clip
private static String ADD = "+";
private static String SUBTRACT = "-";
private static String MULTIPLY = "×";
private static String DIVIDE = "÷";
/**
* 混合计算算式。返回一个String类型的得数
*
* @param formula 字符串类型的算式
* @return 返回一个string类型的得数
*/
public String getResult(String formula) {
//获得算式
String str_formula = formula;
//通过 getSignPosition()方法 得到运算符在字符串中的位置
int[] ints_signPosition = getSignPosition(formula);
try {
// 运算符数量 小于或等于0 ,结束循环。得到最终结果
while (ints_signPosition[0] > 0) {
//aStepForward() 判断先后顺序并计算一步
str_formula = aStepForward(str_formula);
Log.d("调试getResult", "当前算式:" + str_formula);
//通过判断符号位置的方法。判断运算符数量是否为0
ints_signPosition = getSignPosition(str_formula);
}
} catch (Exception e) {