java如何如何解析带有变量的公式,急急急

自定义数学公式中含有变量,现在需要对公式中的变量进行赋值,所赋给的值是从数据库中取出来的,若公式中只含有一个变量的情况,该如何实现。请教高手。

不知道你在给公式赋完变量之后是要做什么,是直接输出公式计算结果呢,还是直接把整个公式打印出来呢。
如果你是想输出计算结果的话,你的所谓的公式应该是写成了一个方法的吧,这样直接把参数传给该方法就可以得到你想要的结果了吧。
如果你是想输出替换变量之后的公式的话,那就用替换做呗,JAVA里面有一个叫MessageFormat的类可以帮你做这个事情。
比方说一个一元一次方程ax=3,a就是你想替换的变量了如果你想把它替换成3,这样的话在java里面可以这么实现
String string = "{0}x=3";
String result = MessageFormat.format(string, "3");
得到的result就是3x=3了。
二元式子的话就这么干啦:
String string = "{0}x+{1}y=3";
String result = MessageFormat.format(string, "3", "3");
结果就是3x+3y=3的啦追问

我现在是这样的情况, 有A、B两个数据库,现在就是我需要就A数据库中新更新的数据更新到B数据库中。当然需要有数据同步的两个数据库的表结构是相同的。但是在入到B库前可能需要对某些字段的值进行一些数学公式的运算,定义的公式中含有的变量就是改字段的属性名,现在需要将公式中属性名(变量)替换成数据库中真实数值然后返回给公式并计算出结果,最后入库。

追答

那你不就得把公式的计算逻辑翻译成java函数,然后再调用呗,变量作为参数传进去。没有直接解析公式的API的

追问

这一步我做好了,我写了一个工具类能够实现基本的数学运算 包括负数的运算,现在就是调用这个工具类得方法就能得到结果,现在就是需要在读取公式之后能够将其中的变量替换成数据库中数据,然后调用公式解析计算的到结果存入到库中。

追答

你的工具是可以直接把算式的结果计算出来是么,比如说输入“2 ×(3 + 1)”就能放回8对吧?
然后你现在的需要被替换的运算式其实是“a × (b + c)”,从数据库里面取出来的是2,3,1对应去替换a,b,c,是这么回事么?

追问

嗯, 我简化了其中的一些环节,我所需要处理的数据只是单独对某一字段而言的,都是独立处理的,所以每个公式里的变量也就是只有一个,我将所有定义的公式都定义为统一的变量V。这样就简化了很多的工作量。

追答

如果是这样的话,解决方法就很多了,直接用replace也可以的吧,
比如你定义了一个公式 String str = "2 + V"; 的话,直接用str.replaceAll("V",你要替换成的东西);这样就可以了,你也可以用MessageFormat呀,定义一个公式把所有的V都换成“{0}”,比如String str = "2 + {0}"; 在调用MessageFormat.format(str , 你要替换成的东西);,这样就可以把“{0}”替换成你想要的啦

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-23
我引用一下别人的答案,希望能帮助楼主!

好多刚学Java的朋友,都很烦JDK的配置问题,在这里我说一下XP下的JDK配置:

我的JDK的存放路径:E:\Program Files\Java\jdk1.5.0_01

在XP下,JAVA_HOME是不用配置的,当然你也可以配置

我的电脑->属性->详细设定->环境变量里设置:

在上面那个框里点“新建”:

变量名:classpath

变量值为

.;E:\Program Files\Java\jdk1.5.0_01\lib\tools.jar;E:\Program Files\Java\jdk1.5.0_01\lib\dt.jar

(注:前面的点和分号一定要有)

变量名:path

变量值:

E:\Program Files\Java\jdk1.5.0_01\bin

下面那个框里有path,你也可以在那里面的后面直接添加;E:\Program Files\Java\jdk1.5.0_01\bin

别忘了加个分号!~

这样就行了。

运行CMD

在里面直接javac,回车,就会出来下面的东东,。说明配置OK了

还有就是,你用CMD窗口编译java程序的时候,最好不要把java程序放在桌面上,因为有时候,会编译不成功或者是找不到源文件!!

第2个回答  2011-09-22
我感觉也是从数据库中取出那个字段的结果集,然后赋给变量就可以了
select 你去的字段 from tablename where 后面加上限制条件
执行上面的sql语句获得结果集 resultset
假设你的变量为 a
则a=resultset.getstring(1)

应该是这样,你试试追问

对思路应该是这样的,我试试。

追答

恩 你试试 如果遇到什么问题 大家讨论讨论 帮你把问题解决了

第3个回答  2011-09-22
这个需要你自己手动写代码实现。
第4个回答  2011-09-22
一个变量那你就传一个变量进去呗。
相似回答