Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算数学表达式,但给定变量而不是数字_Java_String_Expression_Evaluate - Fatal编程技术网

Java 计算数学表达式,但给定变量而不是数字

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

有很多数学表达式计算器,但它们的计算结果类似于1+2/3,等等。但我需要计算包含java变量的表达式。例如,如果程序有两个变量int a=1;int b=2;如果我将a+b/a之类的东西作为字符串传递给一个方法,它应该将结果返回为3,实际上是1+2/1。实际上,公式/表达式来自配置文件


编辑:刚刚发现一个类似的问题,但需要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。