计算公式(java实现)
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实现)相关推荐
- 贷款计算公式——java实现
等额本息 等额本金 提前还款 全部提前还款 等额本息 等额本金 部分提前还款 保持月供不变 等额本息 等额本金 保持期数不变 等额本息 等额本金 废话说在前头,本人公司做银行APP,每次写到贷款计算器 ...
- 点到直线垂足计算公式Java实现
https://blog.csdn.net/jjwwwww/article/details/83830981转载 方便使用,自己记录一下! 求点到直线垂足 private Point getFoot( ...
- Java读取Excel,03版本和07版本
文章目录 java读取Excel 读取Excel的计算公式 java读取Excel 采用poi,这里有个知识点,03版本和07版本的Excel是有区别的,03的最多只有65536行,07的无限制 读取 ...
- execel公式 java工具_PAP-快速开发框架:JAVA 计算器 自定义公式 解决EXCEL计算公式问题...
JAVA 自定义公式计算器, 形如EXCEL中含有大量的计算公式-财务函数: PMT FV NPER PV DB DDB 这些: 可以通过编码方式,解决在JAVA中进行数据计算, 同时可以自定义扩展 ...
- 【Java】求cosx计算公式
求cosx计算公式 [问题描述] [输入形式] [输出形式] [样例输入] [样例说明] [评分标准] [代码] [问题描述] 已知cosx的近似计算公式如下: cosx = 1 - x2/2! + ...
- java导出excel自动计算公式
最近在开发过程中,遇到java读取excel模板并写入数据,其中数据有计算求和的操作,一开始没有实现导出自动计算公式,所以费了一遍事,后台又重新做了一次数据计算,总感觉这样不是很好,所以上网找资料,终 ...
- 使用Java编写欧式期权理论理论计算公式
Java版本欧式期权计算器 使用Java编写欧式期权计算器 先看一下欧式期权计算公式 完整Java代码 使用Java编写欧式期权计算器 目前公司一个小程序项目需要用到欧式期权器,计算看涨期权与看跌期权 ...
- 用java计算电阻,NTC热敏电阻计算公式
本五主要介绍NTC热敏电阻计算公式.Steinhart-Hart方程是计算NTC热敏电阻的主要数学模型,它适合于高精度的宽温度范围.提供了基于给定热敏电阻的温度阻抗表计算特征Steinhart-Har ...
- java实现的三阶贝塞尔曲线_n 阶贝塞尔曲线计算公式实现
n 阶贝塞尔曲线计算公式实现 关于贝塞尔曲线是什么,可以用来做什么,这里就不再介绍,如果你还不了解,可以先去看看下面这篇文章:贝塞尔曲线扫盲 1. 效果参考 2. 思路解析 百度百科上给出的一般参数公 ...
最新文章
- 跨浏览器开发经验总结(三)
- Pycharm 社区版本Database Navigator 安装教程
- Spring boot的Restful风格CRUD
- 为什么德国制造让人那么放心
- 笔记-高项案例题-2018年下-范围管理
- 数学知识总结——矩阵
- 【渝粤教育】 国家开放大学2020年春季 2528监督学 参考试题
- Andrew Ng机器学习公开课笔记 -- Logistic Regression
- Problem C: 默认参数:求圆面积
- k2p华硕系统怎么设置_斐讯k2华硕固件,斐讯k2p华硕固件设置
- 给大学生的劝告——你们为何应该开始接触UNIX/Linux
- 互亿无线5G视频短信
- ps景观平面图转鸟瞰图_怎么用 PS 做景观平面图?
- html展示微信昵称特殊字符,微信昵称表情符号前端显示问题
- android自带浏览器调试,Android 手机浏览器调试使用Chrome进行调试实例详解
- Django项目实战——10—(修改地址前后端逻辑、删除地址前后端逻辑、设置默认地址、修改密码、虚拟机安装docker/FastDFS、电商-商品知识、首页广告数据库表分析、商品信息数据库表分析)
- 分享|对流层延迟、电离层延迟、重力数据下载方式
- R语言的版本更新以及迁移R包
- 7200 笔记本硬盘 444
- 搭建自己的frp服务器