(String) 四则运算公式的分析 这是一个很实用的问题,我们做过:www.htok.net 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我最近用java写了了一个公式计算器,功能如下:一. 能根据需要自由编辑计算公式并得到结果,如编辑(345+345)*3.14+567/34,按“=”按钮即可得到计算结果。二. 支持二、八、十、十六进制的数据计算。三. 公式中可以带入最多三个参数,如编辑公式 (x+456)*y+345/z后,给x,y,z赋值,按“=”按钮即可得到计算结果。 四. 附带一个小型的进制转换器,可以使数据在不同的进制间自由转换。楼主要的话留下邮箱,我发给你 lifan5748(易水寒) mail: [email protected] 谢了 pcniuniu(pcniuniu)程序已经发送,请查收 javaflower我也急想得到这个,谢谢mail:[email protected] lifan5748(易水寒)收到,不过能不能看看你的code? to: pcniuniu(pcniuniu)你有哪些不懂的地方我们可以交流,我现在在学校,源码在家里的机子上,家里机子没联网,现在一时拿不到,你要是真的要,我五一放假回去取,到时发给你。 lifan5748(易水寒) :现在不懂的地方就是得到用户输入的string="1*2+3/4-5",怎么分解string?然后的到运算的最终结果 如果有条件可以连接到数据库,让数据库来做.Select (345+345)*3.14+567/34 as result from dual [email protected]麻烦你给我发一个 [email protected]麻烦你给我发一个,谢谢 也给我一个学习一下,我的email:[email protected] 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; }} System.out.println(jisuan("3*(20.5+3)/(5)-(1-2)*2")); 大家一起来做题目--寻找吸血鬼数字(Think in java) java语言 跳转问题 如何format一个BigDecimal Java回车符问题 谁有关于元旦的flash简单的作品 flash大侠请进 l聊天室 在Hibernate中使用sql-query? 有人知道怎么使用BSD许可的软件吗? 急!哪位高手指点一下怎么用JAVA实现Windows资源管理器搜索界面中的搜索选项部分? 关于applet里更新图片的问题 关于中文显示的问题 如何装设一个timer对象每隔秒变换一个图形依此为空心矩行,实心矩行
mail: [email protected] 谢了
程序已经发送,请查收
收到,不过能不能看看你的code?
现在不懂的地方就是得到用户输入的string="1*2+3/4-5",怎么分解string?然后的到运算的最终结果
Select (345+345)*3.14+567/34 as result from dual
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;
}
}