首页 java算式计算

java算式计算

举报
开通vip

java算式计算基本思想是:先从最里面开始计算,找到最后一个“(”和第一个“)”,提取里面的的式子计算并去其外面一层括号,再把结果以字符串的形式带回被计算的无括号式子的位置,对新式子进行循环上面的操作,指导最外层。无括号式子有else if 对优先级处理,找到第一个优先级高的计算符,通过两个函数分别计算计算符前面的数值长度和后面的数值长度,把两个数值字符串转换值,计算后结果以字符串形式回带到原式子中,循环直到无计算符为止。 import java.util.Scanner; public class caculate_str { ...

java算式计算
基本思想是:先从最里面开始计算,找到最后一个“(”和第一个“)”,提取里面的的式子计算并去其外面一层括号,再把结果以字符串的形式带回被计算的无括号式子的位置,对新式子进行循环上面的操作,指导最外层。无括号式子有else if 对优先级处理,找到第一个优先级高的计算符,通过两个函数分别计算计算符前面的数值长度和后面的数值长度,把两个数值字符串转换值,计算后结果以字符串形式回带到原式子中,循环直到无计算符为止。 import java.util.Scanner; public class caculate_str { static Scanner in=new Scanner(System.in); //式子计算 public static double caculate(String str){ int p1,p2; p2=str.indexOf(")"); if(p2==-1)p2=str.length(); while(true){ p1=str.substring(0, p2).lastIndexOf("("); if(p1==-1)break; str=str.substring(0, p1)+caculat(str.substring(p1+1, p2))+str.substring(p2+1); if(p2!=str.length())p2=str.indexOf(")"); if(p2==-1)p2=str.length(); } return Double.parseDouble(caculat(str)); } //无括号式子计算 public static String caculat(String str){ int p,l,l2; double sum=0; while(str.length()!=num_alenth(str)){ if(str.indexOf("√")!=-1){ p=str.indexOf("√"); l=num_alenth(str.substring(p+1)); sum=Double.parseDouble(str.substring(p+1, p+1+l)); sum=java.lang.Math.sqrt(sum); str=str.substring(0, p)+sum+str.substring(p+1+l); }else if(str.indexOf("%")!=-1){ p=str.indexOf("%"); l=num_blenth(str.substring(0,p)); sum=Integer.parseInt(str.substring(p-l, p)); l2=num_alenth(str.substring(p+1)); sum=((int)sum)%Integer.parseInt(str.substring(p+1, p+1+l2)); str=str.substring(0, p-l)+sum+str.substring(p+1+l2); }else if(str.indexOf("÷")!=-1){ p=str.indexOf("÷"); l=num_blenth(str.substring(0,p)); sum=Double.parseDouble(str.substring(p-l, p)); l2=num_alenth(str.substring(p+1)); sum/=Double.parseDouble(str.substring(p+1, p+1+l2)); str=str.substring(0, p-l)+sum+str.substring(p+1+l2); }else if(str.indexOf("×")!=-1){ p=str.indexOf("×"); l=num_blenth(str.substring(0,p)); sum=Double.parseDouble(str.substring(p-l, p)); l2=num_alenth(str.substring(p+1)); sum*=Double.parseDouble(str.substring(p+1, p+1+l2)); str=str.substring(0, p-l)+sum+str.substring(p+1+l2); } else if(str.indexOf("-")!=-1){ p=str.indexOf("-"); l=num_blenth(str.substring(0,p)); sum=Double.parseDouble(str.substring(p-l, p)); l2=num_alenth(str.substring(p+1)); sum-=Double.parseDouble(str.substring(p+1, p+1+l2)); str=str.substring(0, p-l)+sum+str.substring(p+1+l2); }else if(str.indexOf("+")!=-1){ p=str.indexOf("+"); l=num_blenth(str.substring(0,p)); sum=Double.parseDouble(str.substring(p-l, p)); l2=num_alenth(str.substring(p+1)); sum+=Double.parseDouble(str.substring(p+1, p+1+l2)); str=str.substring(0, p-l)+sum+str.substring(p+1+l2); } } return str; } //计算符后的数值长度 public static int num_alenth(String str){ int n; String isnum="-.0123456789";//判断是否数值 String s=str.substring(0,1); for( n=0;n0;s=str.substring(n,n+1)){ if(isnum.indexOf(s)==-1){n++;break;} n--; } return str.length()-n; } public static void main(String args[]){ String s=""; s="(11+11)-22×22"; System.out.println(caculate(s)); } }
本文档为【java算式计算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_812490
暂无简介~
格式:doc
大小:34KB
软件:Word
页数:2
分类:工学
上传时间:2012-05-02
浏览量:19