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");