有关计算器计算方法的介绍与想法
遍历方式:
1.从左往右遍历
计算优先级:
1.最高优先级:括号
2.第二优先级:乘、除
3.最低优先级:加、减
思路:
假设要计算的算式如下:
5×((2+2)+2)+(2÷2)
从左往右遍历,先将5这个数遍历出来;
继续往右,遍历到'×';
于是取出与×相邻的最近的数,将5与其相乘;
此时调用方法FirstnumLeftToRight(String str);
在这个方法中,会从左往右遍历出第一个数;
遍历到'(';
我们发现(的优先级是最高的,因此要先算括号里的内容;
于是
for (;i<str.length();i++){
if(str.charAt(i)=='('){
kuocount++;
}
else if(str.charAt(i)==')'){
kuocount--;
}
if(kuocount==0){
float answer3= Float.parseFloat(LeftToRightCompute(str.substring(temp+1,i)));//但str本身并未被改变
return answer3+"";
}
}
这个循环调用LeftToRightCompute(str.substring(temp+1,i);
即间接递归,于是从左往右求出了括号内的值,并返回这个结果;
得到5×((2+2)+2)=30,将右边替换左边并继续遍历
遍历到+;
很容易想到,+是加左边全部的值,因此递归;
除法的原理同乘法;
最后得到结果31.0