import java.util.Stack;public class 计算器 {public static void main(String[] args) {String formula="3+2*2";System.out.println(a.getResult(formula));}private static boolean isRightFormat = true;public static int getResult(String formula){int returnValue = 0;try{returnValue = doAnalysis(formula);}catch(NumberFormatException nfe){nfe.printStackTrace();}catch(Exception e){e.printStackTrace();}if(!isRightFormat){System.out.println(("公式格式有误,请检查:" + formula));}return returnValue;}//先解决括号的问题private static int doAnalysis(String formula){int returnValue = 0;LinkedList<Integer> stack = new LinkedList<Integer>();int curPos = 0;String beforePart = "";String afterPart = "";String calculator = "";isRightFormat = true;while(isRightFormat&&(formula.indexOf('(') >= 0||formula.indexOf(')') >= 0)){curPos = 0;for(char s : formula.toCharArray()){if(s == '('){stack.add(curPos);}else if(s == ')'){if(stack.size() > 0){beforePart = formula.substring(0, stack.getLast());afterPart = formula.substring(curPos + 1);calculator = formula.substring(stack.getLast() + 1, curPos);formula = beforePart + doCalculation(calculator) + afterPart;stack.clear();break;}else{System.out.println("有未关闭的右括号!");isRightFormat = false;}}curPos++;}if(stack.size() > 0){System.out.println("有未关闭的左括号!");break;}}if(isRightFormat){returnValue = doCalculation(formula);}if(returnValue==0){returnValue =0;}return returnValue;}private static int doCalculation(String formula) {Stack<Integer> stack = new Stack<Integer>();int preVal = '+';//记录前一个运算符int len=formula.length();for (int i = 0; i < len; i++) {char element = formula.charAt(i);//过滤空格if (element == ' ')continue;if (Character.isDigit(element)) { // 如果是数字就放入栈中int num = 0;while (Character.isDigit(element) && i<len) {num = num * 10 + element - '0';i++;if (i < len)element = formula.charAt(i);}i--;//这个是为了抵消上面for循环中的i++//记录每个数字前面的符号,如果是乘号和除号就直接和前面的数字运算if(preVal=='*')stack.push(stack.pop() * num);if(preVal=='/')stack.push(stack.pop() / num);//记录每个数字前面的符号,如果是加号或者减号就直接放入栈中if(preVal=='+')stack.push(num);if(preVal=='-')stack.push(-num);}else {//记录当前的符号preVal = element;}}//再将栈中的所有元素进行加和int res=0;for (int num :stack) {res+=num;}return res;}

计算公式(java实现)相关推荐

  1. 贷款计算公式——java实现

    等额本息 等额本金 提前还款 全部提前还款 等额本息 等额本金 部分提前还款 保持月供不变 等额本息 等额本金 保持期数不变 等额本息 等额本金 废话说在前头,本人公司做银行APP,每次写到贷款计算器 ...

  2. 点到直线垂足计算公式Java实现

    https://blog.csdn.net/jjwwwww/article/details/83830981转载 方便使用,自己记录一下! 求点到直线垂足 private Point getFoot( ...

  3. Java读取Excel,03版本和07版本

    文章目录 java读取Excel 读取Excel的计算公式 java读取Excel 采用poi,这里有个知识点,03版本和07版本的Excel是有区别的,03的最多只有65536行,07的无限制 读取 ...

  4. execel公式 java工具_PAP-快速开发框架:JAVA 计算器 自定义公式 解决EXCEL计算公式问题...

    JAVA 自定义公式计算器, 形如EXCEL中含有大量的计算公式-财务函数: PMT FV NPER PV DB DDB  这些: 可以通过编码方式,解决在JAVA中进行数据计算, 同时可以自定义扩展 ...

  5. 【Java】求cosx计算公式

    求cosx计算公式 [问题描述] [输入形式] [输出形式] [样例输入] [样例说明] [评分标准] [代码] [问题描述] 已知cosx的近似计算公式如下: cosx = 1 - x2/2! + ...

  6. java导出excel自动计算公式

    最近在开发过程中,遇到java读取excel模板并写入数据,其中数据有计算求和的操作,一开始没有实现导出自动计算公式,所以费了一遍事,后台又重新做了一次数据计算,总感觉这样不是很好,所以上网找资料,终 ...

  7. 使用Java编写欧式期权理论理论计算公式

    Java版本欧式期权计算器 使用Java编写欧式期权计算器 先看一下欧式期权计算公式 完整Java代码 使用Java编写欧式期权计算器 目前公司一个小程序项目需要用到欧式期权器,计算看涨期权与看跌期权 ...

  8. 用java计算电阻,NTC热敏电阻计算公式

    本五主要介绍NTC热敏电阻计算公式.Steinhart-Hart方程是计算NTC热敏电阻的主要数学模型,它适合于高精度的宽温度范围.提供了基于给定热敏电阻的温度阻抗表计算特征Steinhart-Har ...

  9. java实现的三阶贝塞尔曲线_n 阶贝塞尔曲线计算公式实现

    n 阶贝塞尔曲线计算公式实现 关于贝塞尔曲线是什么,可以用来做什么,这里就不再介绍,如果你还不了解,可以先去看看下面这篇文章:贝塞尔曲线扫盲 1. 效果参考 2. 思路解析 百度百科上给出的一般参数公 ...

最新文章

  1. 跨浏览器开发经验总结(三)
  2. Pycharm 社区版本Database Navigator 安装教程
  3. Spring boot的Restful风格CRUD
  4. 为什么德国制造让人那么放心
  5. 笔记-高项案例题-2018年下-范围管理
  6. 数学知识总结——矩阵
  7. 【渝粤教育】 国家开放大学2020年春季 2528监督学 参考试题
  8. Andrew Ng机器学习公开课笔记 -- Logistic Regression
  9. Problem C: 默认参数:求圆面积
  10. k2p华硕系统怎么设置_斐讯k2华硕固件,斐讯k2p华硕固件设置
  11. 给大学生的劝告——你们为何应该开始接触UNIX/Linux
  12. 互亿无线5G视频短信
  13. ps景观平面图转鸟瞰图_怎么用 PS 做景观平面图?
  14. html展示微信昵称特殊字符,微信昵称表情符号前端显示问题
  15. android自带浏览器调试,Android 手机浏览器调试使用Chrome进行调试实例详解
  16. Django项目实战——10—(修改地址前后端逻辑、删除地址前后端逻辑、设置默认地址、修改密码、虚拟机安装docker/FastDFS、电商-商品知识、首页广告数据库表分析、商品信息数据库表分析)
  17. 分享|对流层延迟、电离层延迟、重力数据下载方式
  18. R语言的版本更新以及迁移R包
  19. 7200 笔记本硬盘 444
  20. 搭建自己的frp服务器

热门文章

  1. 如何复制cmd命令行文字
  2. 搭建Ubuntu16.04的nfs服务遇到的问题
  3. 华为云+AI+5G,点燃2020政企智能升级
  4. 如何完善培训开发系统
  5. 21世纪以来14起最大的数据泄露事件
  6. js 正则表达式详解
  7. 华北电力大学计算机科学,华北电力大学计算机科学与技术系介绍
  8. The Angry Flappy Bird - 愤怒的飞翔小鸟
  9. 万历十五年 . 读书笔记
  10. debug(3)--kali gnome桌面图标无法显示