您的位置:首页 > 编程语言 > Java开发

java语义计算器(一)混合四则运算

2017-12-30 01:56 411 查看
  简介:           最近在做一个计算器,遇到了很多问题,也很有收获,一路从IO读写文档走来,感触很深。    (一)java计算器之逆波兰表达式            需要实现简单的加减乘除以及括号等,说道四则运算,就不得不说一下逆波兰表达式,这是一种有趣的后缀表达式,它将我们生活中常见的二元计算式(中缀表达式,如1+2),转变为后缀表达式(12+),方便计算机识别和优化计算等。          比如说    a+(b-c)*d ---> a,b,c,-,d,*,+  逆波兰表达式推荐看看:(1)【Algorithm】逆波兰表达式 java实现        (2)  逆波兰表达式      (3)java解析四则混合运算表达式并计算结果(具体实现)(栈和 逆波兰表达式实现)    (二)java计算器之不需要逆波兰表达式             不过波兰这两个字怎么看都难看,不想要,介绍个没有用到逆波兰表达式的。                  (0)java实现简单四则运算,可以处理括号和(-4)情况                                 地址:http://blog.csdn.net/zmx729618/article/details/52328377                  (1)java实现混合四则运算(采用栈和运算符优先级)                   (2)JAVA实现简单四则混合运算(采用String.indexOf("+")、substring()和递归来实现简单的加减乘除)                         源地址1:http://www.oschina.net/code/snippet_189899_36597
c6ea
                             转载地址2:http://blog.csdn.net/su12345su/article/details/48491849(三)测试改进等         于是我采用了二.2中的算法,主要是看着简单,我将Float改成Double,因为有的数很大,比如说10000的阶乘什么的,就很难算。          代码如下:  public static Double mfo(String s) throwsException{        if(s == null ||"".equals(s.trim())) {            return 0.0;        }        int a1=s.indexOf("+");//寻找第一个加号        int a2=s.indexOf("-");        int a3=s.indexOf("*");        int a4=s.indexOf("/");        int a5=s.indexOf("(");       if(a1==-1&&a2==-1&&a3==-1&&a4==-1){           if(s.trim()==null||"".equals(s.trim())){                throw newException("operate error");            }            returnDouble.parseDouble(s.trim());        }         if(a5!=-1){            int a6=s.indexOf(")");            if(a6==-1){                throw new Exception("括号不匹配");            }else{                Doublef=opt(s.substring(a5+1,a6).trim());               s=s.replace(s.substring(a5,a6+1), String.valueOf(f));                return opt(s);            }        }         if(a1!=-1){//加上加号后面的            returnopt(s.substring(0,a1))+opt(s.substring(a1+1,s.length()));        }        if(a2!=-1){//减去减号后面的            returnopt(s.substring(0,a2))-opt(s.substring(a2+1,s.length()));        }        if(a3!=-1){//乘上乘号后面的            return opt(s.substring(0,a3))*opt(s.substring(a3+1,s.length()));        }        if(a4!=-1){//除以除号后面的            returnopt(s.substring(0,a4))/opt(s.substring(a4+1,s.length()));        }        return Double.parseDouble(s.trim());    } 希望对你有所帮助! 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: