wwe1428103707
1/10/2018 - 6:33 AM

有关计算器计算方法的介绍与想法

有关计算器计算方法的介绍与想法

遍历方式:
  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