码迷,mamicode.com
首页 > 编程语言 > 详细

java 四则混合运算 计算器

时间:2017-02-22 12:58:01      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:正则   i++   str   基本   uml   parse   pat   计算器   ram   

public class Counter {

 /**用递归算法,把括号内的公式算出然后递归
  * @param args
  */

 public static void calculator (String str){
  //System.out.println(str);
  //装载到StringBuffer提升效率
  StringBuffer cstr= new StringBuffer(str);
  //用正则把算式内的剩除符号和数字分组,
  Pattern p=Pattern.compile("\\-?[0-9]+(\\.[0-9]+)?|[*/]");
  if(cstr.length()==0)System.out.println("请输入计算式");
  //找出最后一个括号的坐标
  int start=cstr.lastIndexOf("(");
  //叛断公式是否还有括号
  if(start!=-1){
  int end=cstr.indexOf(")",start);
  StringBuffer spstr=new StringBuffer( cstr.subSequence(start+1, end));
  //删去截去的括号内的基本公式
       cstr=cstr.delete(start, end+1);
       //正则匹配
       Matcher m =p.matcher(spstr);
      List numlist=new ArrayList();
      //把基本公式的值和乘除符号加入到给组
      while(m.find()){
       numlist.add(m.group());
      }
      //调用计算方法并返回结果
      StringBuffer str1=count(numlist);
      //把结果INSERT到指定位置
      cstr=cstr.insert(start, str1);
  }else{
   //最后一次无括号计算基本公式并打印最终结果
   Matcher m =p.matcher(cstr);
   List numlist=new ArrayList();
   while(m.find()){
      numlist.add(m.group());
   }
   StringBuffer str1=count(numlist);
   System.out.println(str1);
   return;
  }
     //递归数组
 // System.out.println(cstr);
  calculator(new String(cstr));
 }


/**
 *
 * @param list  接收基本公式数组
 * @return 返回计算结果字符串
 */
 private static StringBuffer count(List list){
 // System.out.println(list);
  double num = 0;
  for (int i = 0; i < list.size(); i++) {
   if(list.get(i).equals("*")||list.get(i).equals("/")){
   Double  d=list.get(i).equals("*")?Double.parseDouble((String) list.get(i-1))*Double.parseDouble((String) list.get(i+1)):Double.parseDouble((String) list.get(i-1))/Double.parseDouble((String) list.get(i+1));
    list.add(i-1, d+"");list.remove(i);list.remove(i);list.remove(i);
    i=i-1; 
   
   }
  }
  
 for (int i = 0; i < list.size(); i++) {
   num+=Double.parseDouble((String) list.get(i));
  }

  return  new StringBuffer(num+"");
 
 }
 
 
 public static void main(String[] args) {
  
  calculator("3+2+((5-6)*(-3+3/2)/2)");


 }

}

java 四则混合运算 计算器

标签:正则   i++   str   基本   uml   parse   pat   计算器   ram   

原文地址:http://www.cnblogs.com/lalahui/p/6428013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!