资源简介
Java实现计算数学表达式功能,能够计算+ - * / % 以三角函数,幂函数,绝对值,以及含括号的混合运算
例如
输入1+3*5+6/(4+7^3*sin30)这样的表达式她能够正确的算出来

代码片段和文件信息
package JExercise;
import java.util.Stack;
public class Calculator implements MathSymbol{
public double eval(String expression){
String str = infix2Suffix(expression);
if(str == null) {
throw new IllegalArgumentException(“expression is null!“);
}
String[] strs = str.split(“\\s+“);
Stack stack = new Stack();
for(int i = 0; i < strs.length; i++) {
if(!Operator.isOperator(strs[i])) {
stack.push(strs[i]);
} else {
Operator op = Operator.getInstance(strs[i]);
double right = Double.parseDouble(stack.pop());
double left = Double.parseDouble(stack.pop());
double result = op.eval(left right);
stack.push(String.valueOf(result));
}
}
return Double.parseDouble(stack.pop());
}
public String infix2Suffix(String expression){
if (expression==null){return null;}
char[] chs=expression.toCharArray();
Stack stack=new Stack();
StringBuilder sb =new StringBuilder(chs.length);
boolean appendSeparator = false;
boolean sign = true;
for(int i=0;i char c= chs[i];
if (c==BLANK){
continue;
}
if(appendSeparator) {
// sb.append(SEPARATOR);
sb.append(SEPARATOR);
appendSeparator = false;
}
if(isSign(c) && sign) {
sb.append(c);
continue;
}
if(isNumber(c)) {
sign = false;
sb.append(c);
continue;
}
if(isLeftBracket(c)) {
stack.push(c);
continue;
}
if(isRightBracket(c)) {
sign = false;
while(stack.peek() != LEFT_BRACKET) { //查看栈顶对象而不移除它
sb.append(SEPARATOR);
sb.append(stack.pop());
}
stack.pop(); //移除栈顶对象并作为此函数的值返回该对象
continue;
}
appendSeparator = true;
if(Operator.isOperator(c)) {
sign = true;
if(stack.isEmpty() || stack.peek() == LEFT_BRACKET) {
stack.push(c); //把项压入栈顶
continue;
}
int precedence = Operator.getPrority(c);
while(!stack.isEmpty() && Operator.getPrority(stack.peek()) >= precedence) {
sb.append(SEPARATOR);
sb.append(stack.pop());
}
stack.push(c);
}
}
while (!stack.isEmpty()){
sb.append(SEPARATOR);
sb.app
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3544 2010-06-23 19:42 JExercise\Calculator.java
文件 7597 2010-07-02 21:51 JExercise\CalculatorF.java
文件 595 2010-07-02 21:48 JExercise\MathSymbol.java
文件 4299 2010-07-02 21:48 JExercise\Operator.java
目录 0 2010-07-12 15:59 JExercise
----------- --------- ---------- ----- ----
16035 5
相关资源
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
- [免费]java实现有障碍物的贪吃蛇游戏
评论
共有 条评论