java计算器源代码连加_JAVA中实现计算等式运算的计算器源代码--Java自学网

//处理算式,计算出结果//本来我做了个计算器,可惜这个网站不能上传资源,不然就可以和大家分享了!package ClassFile.Calculator;import java.util.LinkedList;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.*;public class CalculatorExp{protected static StringBuffer sb=new StringBuffer();   //储存计算过程的StringBufferpublic CalculatorExp(){}public double CalcExp(String expression){try{sb.setLength(0);sb.append("0.原等式为:"+expression+"n");sb.append("1.检查算式 "+"n");boolean okay =Check(expression);  //检查"("和")"的数量是否相等if(okay==true){sb.append("    (1).算式正确.");sb.append("2.负号前加0n");Pattern pt =Pattern.compile("(-");Matcher mt =pt.matcher(expression);String s=new String();s =mt.replaceAll("(0-");sb.append("    (1).等式标准格式化为:"+s+"n");sb.append("3.开始计算.n");Pattern ptn=Pattern.compile("d+.d+|d+|(|)|+|-|*|/");Deque stack =new LinkedList();          //运算过程中要使用的栈LinkedList list =new LinkedList();     //运算最后的列表Matcher mtr =ptn.matcher(s);while(mtr.find()){String nodeString =s.substring(mtr.start(),mtr.end());if(nodeString.matches("d+.d+|d+")){sb.append("    (1).数字 ""+nodeString+"" 入栈.n");list.push(Double.valueOf(nodeString));}else{OPNode opn =new OPNode(nodeString);int peekLevel=(stack.peek()==null)?0:((new OPNode(stack.peek().toString())).level);if(opn.level==-1){sb.append("    (1).出现 ""+nodeString+"" 时,stack出栈,直到出现")"n");Deque tempDe =new LinkedList();     //临时Deque,储存没有括号的算式String temp =new String();if((new OPNode(temp=stack.peek().toString())).level==-3){Deque dd=new LinkedList();dd.push(stack.poll().toString());//tempDe.push(list.poll());}else{while((new OPNode(temp=stack.poll().toString())).level!= -3){tempDe.push(list.poll());tempDe.push(temp);}}if(list.peek()!=null){tempDe.push(list.poll());}list.push(CalcSimExp(tempDe));}else if(opn.level>peekLevel){sb.append("    (1)."+opn.level+" >= "+peekLevel+", ""+nodeString+"" 入栈.n");stack.push(nodeString);}else{if(opn.level==-3){sb.append("    (1).出现 ""+nodeString+"" 时,一直入stack栈.n");stack.push(nodeString);}else{sb.append("    (1).其它运算符情况: ""+nodeString+"" 入栈n");stack.push(nodeString);}}}}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值