java怎么计算等式,JAVA可计算等式运算的计算器源代码(2)

Deque tempDeque =new LinkedList();

while(stack.peek()!=null){

tempDeque.push(list.poll());

tempDeque.push(stack.poll());

}

tempDeque.push(list.poll());

double result=1;

result= CalcSimExp(tempDeque);

sb.append("    (1).结果为:"+result+"n");

sb.append("4.输出计算结果.n");

//Calculator.resultScreen.setText(""+result);

//System.out.print(sb.toString()+"n");

sb.append("    (1).结果为:"+result+"n");

//如果存在"=",不添加"="

return result;

}else{

}

}catch(Exception es){

//Calculator.resultScreen.setText("错误.n");

//System.out.println(es.getMessage());

//System.out.println("错误.");

sb.append("计算错误.n");

}

return 0.0;

}

public boolean Check(String expression){

boolean boo=false;

boolean boo1 =false;  //判断(和)是否相等

boolean boo2 =false;  //判断数位长度是否大于7

boolean boo3 =false;  //判断expression是否为空

boolean boo4 =false;  //判断等号后边是否有数字

Pattern pt1 =Pattern.compile("(");

Pattern pt2 =Pattern.compile(")");

Matcher mt1 =pt1.matcher(expression);

Matcher mt2 =pt2.matcher(expression);

int lparnum=0;

int rparnum=0;

while(mt1.find()){

lparnum++;

}

while(mt2.find()){

rparnum++;

}

if(lparnum==rparnum){

boo1=true;

}

Pattern pt3 =Pattern.compile("d{8,}");

Matcher mt3 =pt3.matcher(expression);

if(!mt3.find()){

boo2=true;

}

if(expression.length()!=0){

boo3=true;

}

Pattern pt4 =Pattern.compile("=d+");

Matcher mt4 =pt4.matcher(expression);

if(!mt4.find()){

boo4=true;

}

if((boo1==true)&&(boo2==true)&&boo3==true&&boo4==true){

boo=true;

}

if(boo1==false){

sb.append("左右括号数目不一至,请重新输入.n");

}

if(boo2==false){

sb.append("数字位数大于7,请重新输入.n");

}

if(boo3==false){

sb.append("算式为空,请输入算式.n");

}

return boo;

}

public double CalcSimExp(Deque tempDe){

LinkedList number =new LinkedList();

Deque operation =new LinkedList();

String num="d+.d+|d+|-d+|-d+.d+";

String oper="+|-|*|/";

Pattern pt1 =Pattern.compile(num);

Pattern pt2 =Pattern.compile(oper);

if(number.size()==1){

return Double.parseDouble(number.poll().toString());

}else{

while(tempDe.peek()!=null){

String s1=new String();

s1=tempDe.poll().toString();

Matcher mt1=pt1.matcher(s1);

Matcher mt2=pt2.matcher(s1);

if(mt1.matches()){

sb.append("        (2).数字入栈:"+s1+"n");

number.push(Double.parseDouble(s1));

}else if(mt2.matches()){

OPNode op =new OPNode(s1);

if(op.level==1){

sb.append("        (2).一级符号"+s1+"入栈n");

operation.push(s1);

}else if(op.level==2){

sb.append("        (2).三级符号"+s1+"出现,取出number的两个数字进行计算.n");

number.push(tempDe.pop());

double double1=Double.parseDouble(number.poll().toString());

double double2=Double.parseDouble(number.poll().toString());

number.push(SimpleCalc(double2,s1,double1));

}

}

}

sb.append("        (2).运算符只剩下"+"和"-"了,处理:n");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值