1 public static double evaluate(String inStr) { 2 Stack<String> ops = new Stack<String>(); //操作符栈 3 Stack<Double> vals = new Stack<Double>(); //操作数栈 4 char[] arr = inStr.toCharArray(); 5 for(char c : arr){ 6 String s =c+""; 7 if(s.equals("")); 8 else if(s.equals("(")) ops.push(s); 9 else if(s.equals("+")) ops.push(s); 10 else if(s.equals("-")) ops.push(s); 11 else if(s.equals("*")) ops.push(s); 12 else if(s.equals("/")) ops.push(s); 13 else if(s.equals(")")){//如果是 )弹出操作符和操作数,计算结果并压入栈 14 String op = ops.pop(); 15 double v = vals.pop(); 16 if(op.equals("+")) v=vals.pop()+v; 17 else if(op.equals("-")) v=vals.pop()-v; 18 else if(op.equals("*")) v=vals.pop()*v; 19 else if(op.equals("/")) v=vals.pop()/v; 20 vals.push(v); 21 } 22 else vals.push(Double.parseDouble(s)); 23 } 24 return vals.pop(); 25 }
专注Java开发
作者:翟亚豪
邮箱:zyh186214@hotmail.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。