//处理算式,计算出结果//本来我做了个计算器,可惜这个网站不能上传资源,不然就可以和大家分享了!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);}}}}
java计算器源代码连加_JAVA中实现计算等式运算的计算器源代码--Java自学网
最新推荐文章于 2021-04-12 11:44:15 发布