package com.infogrid.g2b;
import java.util.HashMap;
import java.util.Map;
public class Op {
private static final Map
<String,Integer
> ops
= new HashMap
<String, Integer
>();
static{
ops.put("+",10);
ops.put("-",10);
ops.put("*",20);
ops.put("/",20);
ops.put("%",20);
ops.put("(",100);
ops.put(")",100);
}
public static boolean isSign
(String sign1
){
if(s==null)
return false;
else
return true;
}
if(p1==null)
if(p2==null)
return p1-p2;
}
if(sign.equals("+"))
return a+b;
if(sign.equals("-"))
return a-b;
if(sign.equals("*"))
return a*b;
if(sign.equals("/"))
return a/b;
if(sign.equals("%"))
return a%b;
}
}
package com.infogrid.g2b;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Calculator {
private List<String> list = new ArrayList<String>();
private Stack<String> stack = new Stack<String>();
private List
<String
> resolveExpr
(String exp
){
String opert
=exp.
replaceAll("\\d*\\.\\d+?",
"");
List<String> list=new ArrayList<String>();
int pidx=-1;
for(int i=0;i<opert.length();i++){
String p
=opert.
substring(i, i
+1);
pidx=exp.indexOf(p);
if(exp.substring(0,pidx).trim().length()!=0){
list.add(exp.substring(0, pidx));
}
list.add(exp.substring(pidx, pidx+1));
exp=exp.substring(pidx+1);
}
if(exp.length()>0){
list.add(exp);
}
return list;
}
private void dealSign
(String s
){
if(stack.size()==0){
stack.push(s);
return;
}
if(Op.compare(s, ps)>0||ps.equals("(")){
if(s.equals(")")){
list.add(ps);
while(stack.size()>0){
ps = stack.pop();
if(ps.equals("("))
break;
list.add(ps);
}
}else{
stack.push(ps);
stack.push(s);
}
}else{
list.add(ps);
dealSign(s);
}
}
private void dealVar
(String s
){
list.add(s);
}
if(!Op.isSign(s)){
stack.push(s);
continue;
}
if(stack.size()>0)
b = stack.pop();
if(stack.size()>0)
a = stack.pop();
stack.push(Op.cal(a, b, s)+"");
}
return Double.
valueOf(stack.
pop());
}
List<String> ss = resolveExpr(expression);
if(Op.isSign(s)){
dealSign(s);
}else{
dealVar(s);
}
}
while(stack.size()>0){
list.add(stack.pop());
}
return getResult();
}
public static void main
(String[] args
) {
System.
out.
println(new Calculator
().
calculate("1.5+2.1+((4/2)-6/((2+1)*2))+6%4"));
}
}
//java/7794