Java 计算数学表达式,但给定变量而不是数字
有很多数学表达式计算器,但它们的计算结果类似于1+2/3,等等。但我需要计算包含java变量的表达式。例如,如果程序有两个变量int a=1;int b=2;如果我将a+b/a之类的东西作为字符串传递给一个方法,它应该将结果返回为3,实际上是1+2/1。实际上,公式/表达式来自配置文件Java 计算数学表达式,但给定变量而不是数字,java,string,expression,evaluate,Java,String,Expression,Evaluate,有很多数学表达式计算器,但它们的计算结果类似于1+2/3,等等。但我需要计算包含java变量的表达式。例如,如果程序有两个变量int a=1;int b=2;如果我将a+b/a之类的东西作为字符串传递给一个方法,它应该将结果返回为3,实际上是1+2/1。实际上,公式/表达式来自配置文件 编辑:刚刚发现一个类似的问题,但需要java的解决方案据我所知,在java中无法将字符串转换为变量名。相反,您可能需要做的是从字符串到int的映射。然后可以解析该命令并检索与这些字符串关联的值 例如: HashM
编辑:刚刚发现一个类似的问题,但需要java的解决方案据我所知,在java中无法将字符串转换为变量名。相反,您可能需要做的是从字符串到int的映射。然后可以解析该命令并检索与这些字符串关联的值 例如:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
Scanner scan = new Scanner("a b c");
String str1 = scan.next();
int val1 = map.get(str1);
现在val中存储了值1,该值与前面的字符串a关联
下一步是为算法编写解析器。那是一种完全不同的动物。如果您正在寻找快速实现的东西,如果可能的话,我建议尝试使用。在任何情况下,我都不相信有一个快速的解决方案可以完成所有这一切,包括自动解析
您可能希望在此处查看此链接:。这不是您想要做的,但可能会有所帮助。有一些解析器可以让您计算字符串表达式,但您必须以某种方式映射变量。对于数值表达式,我将使用下面的示例:
int a = 1; //Given some variables
int b = 2;
Evald ex = new Evald(); //and an expression
ex.parse("(a + b) / a");
ex.addVariable("a", a); //map the variables
int bIndex = ex.addVariable("b", b); //optionally saving an index mapping
double dResult = ex.evaluate(); //evaluate (sets dResult to 3.0)
a = 3; //update your variables
b = 9;
ex.addVariable("a", a); //map new values using the string
ex.setVariable(bIndex, b); //or saved index
int iResult = (int)ex.evaluate(); //evaluate (sets iResult to 4)
我使用了更通用的解决方案,从使用类似的语法来处理字符串、向量、复数等,到脚本语言(如),选择通常归结为软件需求—通用性、许可、库依赖性和执行速度。我感到困惑。那行代码不知怎么的没有给你3?问题是什么?你想要一个符号解决方案吗?我很困惑1+2/1如何返回1。我不太确定,但我认为他想把一个字符串像a+b/a一样传递给一个函数,然后根据变量的实际值得到结果,即3。