java中调用数学函数加前缀_java四则运算----前缀、中缀、后缀表达式

package cn.com.genius.base.comon.tool;

import java.util.ArrayList;

import java.util.List;public classCalculatorTool {privateString result;privateString formula;private List s=new ArrayList();//中间结果

/** 判断字符是否为运算符,是为真,不是为假

*@param c

*@return

*@author chj

*@date 2015-10-28 上午10:49:43

*@comment*/

privateboolean isOprator(String c) {//TODO Auto-generated method stub

try{if(c.equals("+")||c.equals("-")||c.equals("*")||c.equals("/")||c.equals("(")||c.equals(")"))return true;

}catch(Exception e) {//TODO: handle exception

return false;

}return false;

}/** 判断字符是否为‘)’,是为真,不是为假

*@param c

*@return

*@author chj

*@date 2015-10-28 上午10:51:23

*@comment*/

privateboolean isBracketRight(String c) {//TODO Auto-generated method stub

try{if(c.equals(")"))return true;

}catch(Exception e) {//TODO: handle exception

return false;

}return false;

}/** 判断字符是否为‘(’,是为真,不是为假

*@param c

*@return

*@author chj

*@date 2015-10-28 下午3:34:55

*@comment*/

privateboolean isBracketLeft(String c) {//TODO Auto-generated method stub

try{if(c.equals("("))return true;

}catch(Exception e) {//TODO: handle exception

return false;

}return false;

}/** 中叠式 转 逆波兰式

*@param formula

*@author chj

*@date 2015-10-28 上午11:06:18

*@comment*/

private voidreversePoli(){

List s1=new ArrayList();//运算符

String temp="";//存数字

charc;for(int i=0;i

c=formula.charAt(i);if(isOprator(String.valueOf(c))){//判断是否是运算符,得到完整的一个数temp,放入s2

if(!temp.equals("")){

s.add(temp);

}if(isBracketRight(String.valueOf(c))){//是')',依次弹出s1中的符号到s2中,直到遇到‘(’

for(int j=s1.size()-1;j>-1;j--){if(isBracketLeft(String.valueOf(c))){

s1.remove(j);break;

}if(s1.get(j)!='('){//除了‘(’以外的运算符加入s中

s.add(String.valueOf(s1.get(j)));

}

s1.remove(j);

}

}else{

s1.add(c);

}

temp="";

}else{

temp+=c;

}

}if(!temp.equals("")){

s.add(temp);

}for(int i=0;i

s.add(String.valueOf(s1.get(i)));

}

}/** 逆波兰式计算

*

*@author chj

*@date 2015-10-28 上午11:31:09

*@comment*/

private voidcount_result(){

reversePoli();

List s1=new ArrayList();for(int i=0;i

s1.remove(len-1);

s1.remove(len-2);

s1.add(String.valueOf(re));

}else{

s1.add(s.get(i));

}

}

result=s1.get(0);

}/** 四则运算

*@param num1

*@param num2

*@param op

*@return

*@throws IllegalArgumentException

*@author chj

*@date 2015-10-28 上午11:17:05

*@comment*/

private double calc(double num1, double num2, charop)

throws IllegalArgumentException {switch(op) {case '+':return num1 +num2;case '-':return num1 -num2;case '*':return num1 *num2;case '/':if (num2 == 0) throw new IllegalArgumentException("divisor can't be 0.");return num1 /num2;default:return 0; //will never catch up here

}

}publicString getResult() {

count_result();returnresult;

}public voidsetResult(String result) {this.result =result;

}publicString getFormula() {returnformula;

}public voidsetFormula(String formula) {this.formula =formula;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值