我是初学者。我想将字符串转换为数学方程式,以便成为我的图形计算器的输入 例如:
cos(x+1)+ ln(x)
所以我们将其转换为
double x = -10;
for (int i=0; i<100; i++) {
double y=Math.cos(x+1)+Math.log(x)
x=x+0.5
}
所以我想知道一种转换y的方法
谢谢
答案 0 :(得分:2)
java中没有“开箱即用”的解决方案。
然而: 强制性答案:google - &gt; “将字符串转换为数学表达式java”前几个答案都很不错(如:What's a good library for parsing mathematical expressions in java?) 必要的答案2:网上有很多用于将字符串转换为数学表达式的库,根据规则命名它们是偏离主题的,所以我建议“必须回答”前几次点击。
最有可能选择您将收到的格式,并为该格式编写自己的解析器。
答案 1 :(得分:1)
您需要先编写解析器,构建输入表达式的树。然后,您可以使用它来生成代码。
但是,“我是初学者”并不适合编写解析器:)
答案 2 :(得分:1)
您需要一个描述表达式语法的小型正式语法,然后您需要将输入字符串表达式转换为AST表示。
http://en.wikipedia.org/wiki/Abstract_syntax_tree
最后,你需要有一个程序来评估某些参数值的AST。
答案 3 :(得分:1)
在纯Java中,这不是一件简单的事情。还有很多其他类似的问题,这里有很好的答案。大多数解决方案都与在解释器中计算表达式或解析表达式(有一些可用于此的库),甚至是脱壳有关。我不知道Android中有什么可用来做这个,但在SO中有很多很好的答案。这是一个很好的开始:Evaluating a math expression given in string form
答案 4 :(得分:0)
我使用NCalc做了那件事。我传入了用户的字符串表达式,用我正在评估的值替换变量,然后使用Evaluate方法并解析为double。
private double Function(double t, double y)
{
NCalc.Expression expression = new NCalc.Expression(this.Expression);
expression.Parameters["t"] = t;
expression.Parameters["y"] = y;
double value;
double.TryParse(expression.Evaluate().ToString(), out value);
return value;
}
例如,假设输入t = .5和y = 1且表达式为“4 * y + Tan(2 * t)”,我们将评估字符串“4 * 1 + Tan(2 * .5) “使用NCalc。
它并不完美,如果NCalc无法解析用户的字符串或函数的数据类型不同,则抛出异常。我正在研究它。
我也问了同样的问题here。