在Java中评估三角表达式

时间:2015-04-04 12:07:25

标签: java function

如何在控制台中插入三角函数以便进一步使用它?例如,sin(x)= 2x + 3log(y)或类似的东西。我想..我需要输入一个表达式作为字符串,然后将其处理为。但是如何?

3 个答案:

答案 0 :(得分:3)

查看exp4j

我们在我们的一个项目中广泛使用了这个库,以解决您遇到的完全相同的问题。

Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
                .variables("x", "y")
                .build()
                .setVariable("x", 2.3)
                .setVariable("y", 3.14);
        double result = e.evaluate();

在您的特定情况下,您可以在控制台中询问用户以下输入并使用这些输入构建表达式:

  1. 输入要评估的表达式。这将成为ExpressionBuilder构造函数的参数。
  2. 输入表示表达式中变量的字符串。这将成为变量方法的输入。您可以将这些字符串作为键添加到Map中,以便在下一步中使用。
  3. 输入每个变量的值。这将成为setVariable方法的输入。您可以将所有变量值收集为上一步中创建的Map中的值。您可以遍历地图并调用setVariable(键,值),这样您就不需要知道表达式中存在多少变量。

答案 1 :(得分:1)

尝试 exp4j 。示例(来自链接):

Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
        .variables("x", "y")
        .build()
        .setVariable("x", 2.3)
        .setVariable("y", 3.14);
double result = e.evaluate();

另一个选项是 Javaluator 。例如,请参阅链接。

还有 EvalX 。见下面的例子(来自链接):

Expression expression = new Expression("1+1/3");
result = expression.eval():
expression.setPrecision(2);
result = expression.eval():

我希望这有帮助!

答案 2 :(得分:1)

另外,我最近发现你可以将exp4j ExpressionBuilder分成两部分并在for循环中为变量添加值,你可以在这个网站找到可能的例子https://github.com/fasseg/exp4j/blob/master/src/test/java/net/objecthunter/exp4j/ExpressionBuilderTest.java

ExpressionBuilder e = new ExpressionBuilder("x^2")
 .variable("x")
 .build();

for(int i = 0; i < 10; i++) {
  e.setVariable("x", i);
  System.out.println("x^2 = " + e.evaluate());
}