java 四则混合运算_java 四则混合运算 计算器

public class Counter {

/**用递归算法,把括号内的公式算出然后递归

* @param args

*/

public static void calculator (String str){

//System.out.println(str);

//装载到StringBuffer提升效率

StringBuffer cstr= new StringBuffer(str);

//用正则把算式内的剩除符号和数字分组,

Pattern p=Pattern.compile("\\-?[0-9]+(\\.[0-9]+)?|[*/]");

if(cstr.length()==0)System.out.println("请输入计算式");

//找出最后一个括号的坐标

int start=cstr.lastIndexOf("(");

//叛断公式是否还有括号

if(start!=-1){

int end=cstr.indexOf(")",start);

StringBuffer spstr=new StringBuffer( cstr.subSequence(start+1, end));

//删去截去的括号内的基本公式

cstr=cstr.delete(start, end+1);

//正则匹配

Matcher m =p.matcher(spstr);

List numlist=new ArrayList();

//把基本公式的值和乘除符号加入到给组

while(m.find()){

numlist.add(m.group());

}

//调用计算方法并返回结果

StringBuffer str1=count(numlist);

//把结果INSERT到指定位置

cstr=cstr.insert(start, str1);

}else{

//最后一次无括号计算基本公式并打印最终结果

Matcher m =p.matcher(cstr);

List numlist=new ArrayList();

while(m.find()){

numlist.add(m.group());

}

StringBuffer str1=count(numlist);

System.out.println(str1);

return;

}

//递归数组

// System.out.println(cstr);

calculator(new String(cstr));

}

/**

*

* @param list  接收基本公式数组

* @return 返回计算结果字符串

*/

private static StringBuffer count(List list){

// System.out.println(list);

double num = 0;

for (int i = 0; i < list.size(); i++) {

if(list.get(i).equals("*")||list.get(i).equals("/")){

Double  d=list.get(i).equals("*")?Double.parseDouble((String) list.get(i-1))*Double.parseDouble((String) list.get(i+1)):Double.parseDouble((String) list.get(i-1))/Double.parseDouble((String) list.get(i+1));

list.add(i-1, d+"");list.remove(i);list.remove(i);list.remove(i);

i=i-1;

}

}

for (int i = 0; i < list.size(); i++) {

num+=Double.parseDouble((String) list.get(i));

}

return  new StringBuffer(num+"");

}

public static void main(String[] args) {

calculator("3+2+((5-6)*(-3+3/2)/2)");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值