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()); } 希望对你有所帮助!
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()); } 希望对你有所帮助!
相关文章推荐
- java 语言对计算器工作原理的实现+JFrame
- Java对象简单实用案例之计算器实现代码
- java小程序 计算器
- Java进行语义相似度分析
- 平时关注.net今个儿用java做了个计算器.
- JAVA课程学习六:简易两个数计算器
- 使用Java 创建一个计算器
- java编写的计算器
- 【java】计算器1
- 用Java写的计算器小程序
- 【计算器Java实现】基于栈的复杂表达式解析&&数值计算
- Java简单版的计算器
- 用java编写的计算器案例
- 数据结构之计算器的实现(JAVA)(四)
- 计算器(CalculatorBean.java)
- java组件写一个GUI 计算器
- java 计算器
- java例程练习(简单的计算器[调停者 设计模式 及 内部类 ])
- java:计算器(填坑)
- Java进行语义相似度分析