社区
Java SE
帖子详情
(String) 四则运算公式的分析
pcniuniu
2005-04-21 10:49:53
用户输入一个简单的四则运算(例如:2*10+100-74/3),如何分析这个从用户端获得的字符串,并计算结果?
...全文
522
26
打赏
收藏
(String) 四则运算公式的分析
用户输入一个简单的四则运算(例如:2*10+100-74/3),如何分析这个从用户端获得的字符串,并计算结果?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nako_ruru
2005-04-23
打赏
举报
回复
给我一份啊,nako_ruru@sina.com
pcniuniu
2005-04-22
打赏
举报
回复
lifan5748(易水寒)
mail: niuxun@hotmail.com 谢了
lifan5748
2005-04-22
打赏
举报
回复
我最近用java写了了一个公式计算器,功能如下:
一. 能根据需要自由编辑计算公式并得到结果,如编辑(345+345)*3.14+567/34,按“=”按钮即可得到计算结果。
二. 支持二、八、十、十六进制的数据计算。
三. 公式中可以带入最多三个参数,如编辑公式 (x+456)*y+345/z后,给x,y,z赋值,按“=”按钮即可得到计算结果。
四. 附带一个小型的进制转换器,可以使数据在不同的进制间自由转换。
楼主要的话留下邮箱,我发给你
faen
2005-04-22
打赏
举报
回复
up
nako_ruru
2005-04-22
打赏
举报
回复
这个要用到栈吧,期待高人解答
dj0517
2005-04-22
打赏
举报
回复
up
faen
2005-04-22
打赏
举报
回复
System.out.println(jisuan("3*(20.5+3)/(5)-(1-2)*2"));
faen
2005-04-22
打赏
举报
回复
写好了,贴出来,由于写的仓促,所以代码长了点,其实还可以缩短很多的。
faen
2005-04-22
打赏
举报
回复
import java.io.*;
import java.util.*;
public class Hello
{
private static int index=-1;
public static void main(String [] args)
{
System.out.println(jisuan("3*(2+3)/(5)-(1-2)*2"));
System.out.println(jisuan("3*(2+3)/(5-5)-(1-2)*2"));
}
private static double jisuan(String s)
{
LinkedList<Token>oper=new LinkedList<Token>();
oper.addFirst(new Token('#',-1));
LinkedList<Double>num=new LinkedList<Double>();
String t="";
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='(')
{
if(t.equals("")!=true)
{
num.addFirst(new Double(t));
t="";
}
oper.addFirst(new Token('(',0));
}
if(s.charAt(i)==')')
{
if(t.equals("")!=true)
{
num.addFirst(new Double(t));
t="";
}
while(true)
{
Token cur=oper.removeFirst();
if(cur.c=='(')break;
double d2=num.removeFirst();
double d1=num.removeFirst();
if(cur.c=='+')
num.addFirst(d1+d2);
if(cur.c=='-')
num.addFirst(d1-d2);
if(cur.c=='*')
num.addFirst(d1*d2);
if(cur.c=='/')
{
if(d2==0)
{
System.out.println("除数为0");
System.exit(1);
}
num.addFirst(d1/d2);
}
}
}
if(s.charAt(i)=='+')
{
if(t.equals("")!=true)
{
num.addFirst(new Double(t));
t="";
}
Token tnew=new Token('+',1);
while(true)
{
Token cur=oper.removeFirst();
if(tnew.level>cur.level)
{
oper.addFirst(cur);
oper.addFirst(tnew);
break;
}
else
{
double d2=num.removeFirst();
double d1=num.removeFirst();
if(cur.c=='+')
num.addFirst(d1+d2);
if(cur.c=='-')
num.addFirst(d1-d2);
if(cur.c=='*')
num.addFirst(d1*d2);
if(cur.c=='/')
{
if(d2==0)
{
System.out.println("除数为0");
System.exit(1);
}
num.addFirst(d1/d2);
}
}
}
}
if(s.charAt(i)=='-')
{
if(t.equals("")!=true)
{
num.addFirst(new Double(t));
t="";
}
Token tnew=new Token('-',1);
while(true)
{
Token cur=oper.removeFirst();
if(tnew.level>cur.level)
{
oper.addFirst(cur);
oper.addFirst(tnew);
break;
}
else
{
double d2=num.removeFirst();
double d1=num.removeFirst();
if(cur.c=='+')
num.addFirst(d1+d2);
if(cur.c=='-')
num.addFirst(d1-d2);
if(cur.c=='*')
num.addFirst(d1*d2);
if(cur.c=='/')
{
if(d2==0)
{
System.out.println("除数为0");
System.exit(1);
}
num.addFirst(d1/d2);
}
}
}
}
if(s.charAt(i)=='*')
{
if(t.equals("")!=true)
{
num.addFirst(new Double(t));
t="";
}
Token tnew=new Token('*',2);
while(true)
{
Token cur=oper.removeFirst();
if(tnew.level>cur.level)
{
oper.addFirst(cur);
oper.addFirst(tnew);
break;
}
else
{
double d2=num.removeFirst();
double d1=num.removeFirst();
if(cur.c=='+')
num.addFirst(d1+d2);
if(cur.c=='-')
num.addFirst(d1-d2);
if(cur.c=='*')
num.addFirst(d1*d2);
if(cur.c=='/')
{
if(d2==0)
{
System.out.println("除数为0");
System.exit(1);
}
num.addFirst(d1/d2);
}
}
}
}
if(s.charAt(i)=='/')
{
if(t.equals("")!=true)
{
num.addFirst(new Double(t));
t="";
}
Token tnew=new Token('/',2);
while(true)
{
Token cur=oper.removeFirst();
if(tnew.level>cur.level)
{
oper.addFirst(cur);
oper.addFirst(tnew);
break;
}
else
{
double d2=num.removeFirst();
double d1=num.removeFirst();
if(cur.c=='+')
num.addFirst(d1+d2);
if(cur.c=='-')
num.addFirst(d1-d2);
if(cur.c=='*')
num.addFirst(d1*d2);
if(cur.c=='/')
{
if(d2==0)
{
System.out.println("除数为0");
System.exit(1);
}
num.addFirst(d1/d2);
}
}
}
}
if(s.charAt(i)>='0'&&s.charAt(i)<='9'||s.charAt(i)=='.')
t+=s.charAt(i);
}
if(t.equals("")!=true)
num.addFirst(new Double(t));
while(oper.size()>1)
{
Token cur=oper.removeFirst();
double d2=num.removeFirst();
double d1=num.removeFirst();
if(cur.c=='+')
{
num.addFirst(d1+d2);
}
if(cur.c=='-')
num.addFirst(d1-d2);
if(cur.c=='*')
num.addFirst(d1*d2);
if(cur.c=='/')
{
if(d2==0)
{
System.out.println("除数为0");
System.exit(1);
}
num.addFirst(d1/d2);
}
}
return num.getFirst();
}
}
class Token
{
public char c;
public int level;//运算优先级 :(:0 +:1 -:1 *:2 /:2 ):3
public Token(char c,int level)
{
this.c=c;
this.level=level;
}
public String toString()
{
return ""+c+" "+level;
}
}
johngerwong
2005-04-22
打赏
举报
回复
用编译原理的算符优先级来做啊!
zj_pht
2005-04-22
打赏
举报
回复
也给我一个学习一下,我的email:zj_pht@sina.com.cn
faen
2005-04-22
打赏
举报
回复
等一下,我给你写一个,把源代码贴出来。
shan1119
2005-04-22
打赏
举报
回复
blood1119@hotmail.com
麻烦你给我发一个,谢谢
OnlyFor_love
2005-04-22
打赏
举报
回复
congbailing_914@163.com
麻烦你给我发一个
knight_yl
2005-04-22
打赏
举报
回复
如果有条件可以连接到数据库,让数据库来做.
Select (345+345)*3.14+567/34 as result from dual
pcniuniu
2005-04-22
打赏
举报
回复
等你的code吧...
lifan5748
2005-04-22
打赏
举报
回复
《数据结构》堆栈那一掌有详细的方法介绍,我就是照着书上说的做出来的,感觉还是比较难的,在这里三言两语很难说清楚
pcniuniu
2005-04-22
打赏
举报
回复
lifan5748(易水寒) :
现在不懂的地方就是得到用户输入的string="1*2+3/4-5",怎么分解string?然后的到运算的最终结果
lifan5748
2005-04-22
打赏
举报
回复
to: pcniuniu(pcniuniu)你有哪些不懂的地方我们可以交流,我现在在学校,源码在家里的机子上,家里机子没联网,现在一时拿不到,你要是真的要,我五一放假回去取,到时发给你。
homeland520
2005-04-22
打赏
举报
回复
javacc
加载更多回复(6)
python 栈-解析
四则运算
公式
python 栈-解析
四则运算
公式
文章目录python 栈-解析
四则运算
公式
1、栈栈的抽象数据类型解析算数表达式中序转后序后序表达式计算2、解析
四则运算
-Coding 1、栈 栈也被称为下堆栈, 他是有序集合, 添加操作和移除操作发生在同一端,即顶端, 另一端称为底端 LIFO(last-in, first-out) 后进先出 可用于反转排列顺序 栈的抽象数据类型 支持以下操作 push(item) 将元素添加到栈中 pop() 返回并删除顶端的元素 peek() 返回顶端的元素, 但不删除元素 i
java验证
四则运算
公式
的合法性(包含括号、字母、小数)
java验证
四则运算
公式
的合法性(包含括号、字母、小数) 1.场景描述 在实际的业务中,一个测点需要根据其他多个已知测点计算得出,在页面中输入计算
公式
,需要调用后台接口验证计算
公式
的合法性。比如验证a2,m2.0,(d0022)+2,(d2)+,(e+3)/3,(ef001+3,1/1等合法性。 2.工具类示例 /** * 验证表达式工具类 */ public class ExpressionUtils { /** * 验证
四则运算
表达式是否准确 * @param expression
Java简单
四则运算
题目 从控制台输入只有一个
四则运算
符(+,-,,/)的简单
四则运算
式子,然后输出计算结果。例如输入345+23,则输出345+23=368;输入20100,则输出20*10=2000;如果输入非
四则运算
式子就给出提示信息。运算结果如下图所示 提示:本篇文章是面对初学者文章,其中未使用java语言中类与对象的概念,没有什么深层次和抽象的内容。学习者只需一步一步阅读就可理解程序的运行逻辑,与c语言编程较为相似。 不足需改正点:1.该程序没有使用函数,即没有将程序做模块化设计。2.该程序的判断条件仍未完善,例如
java实现字符串
四则运算
公式
解析工具类
项目中用到用户定义运算
公式
进行就算的需求,这样需要进行字符串
四则运算
解析,下面提供字符串
公式
四则运算
解析与计算工具类,需要的同学可参考。工具类如下:FormulaCalculator.java: package org.nercita.bcp.record.util; import java.util.ArrayList; import java.util.LinkedList; /**
字符串
四则运算
字符串
四则运算
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章