【问题标题】:Evaluate math formula from String using ScriptEngine使用 ScriptEngine 从 String 计算数学公式
【发布时间】:2013-12-12 19:52:06
【问题描述】:

这是我的代码:

double value = 2.55;
String formule = "x+x";

我想将句子中的 x 变量替换为 value 变量,所以我的下一个代码是:

formule = formule.replace("x", String.valueOf(value));
System.out.println(formule);

我在终端返回了0.0+0.0


这是我的代码,其中 x -> 0.0 永远:

protected double Formule(Double Value) throws ScriptException
{
    String ValueString = Value.toString();
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    Double source = null;
    formule = formule.replace("sin", "Math.sin").
         replace("cos", "Math.cos").
         replace("tan", "Math.tan").
         replace("sqrt", "Math.sqrt").
         replace("sqr", "Math.pow").
         replace("log", "Math.log").
         replace("x", ValueString);
    try {
        source = (Double)engine.eval(formule);
    } catch(Exception exc) {
        JOptionPane.showMessageDialog(null, "Invalid input", "Error", JOptionPane.ERROR_MESSAGE);
    }
    this.repaint();
    return source;
}

已解决!!!

我刚刚创建了名为 tmp 的临时字符串,现在它看起来像这样

protected double Formule(Double Value) throws ScriptException
{       
    String tmp;
    tmp = formule.replace("sin", "Math.sin").
    replace("cos", "Math.cos").
    replace("tan", "Math.tan").
    replace("sqrt", "Math.sqrt").
    replace("sqr", "Math.pow").
    replace("log", "Math.log").
    replace("x", String.valueOf(Value));
    try {
        return (Double)engine.eval(tmp);
    } catch(Exception fexp) {
        return null;      
    }
    return 0;
}

因为String formule 是我班级中的全局变量

【问题讨论】:

  • 出了什么问题,除了明显的错字“replase”?
  • @DanielB OP 希望/需要使用基本的String 的公式评估器。这一点都没错,所以我不知道为什么这个问题会受到如此多的反对。
  • 在我的代码中没有错,只是在这里,在这篇文章中
  • 那你明白了一些我不明白的事情。不过我没有投反对票..
  • 添加了已删除答案中的代码。下次,请编辑您的问题并添加相关信息,而不是发布答案。

标签: java string


【解决方案1】:

此代码(来自您的帖子)-

public static void main(String[] args) {
  double value = 2.55;
  String formule = "x+x";
  formule = formule.replace("x",
      String.valueOf(value));
  System.out.println(formule);
}

打印

2.55+2.55

在这里运行时。你确定你访问的是你上面初始化的double value吗?看起来您必须访问另一个名为 value 的变量(未按预期初始化 - 值 0 也是如此)。

【讨论】:

  • 松了一口气,我真的很想知道问题的代码有什么问题!
  • 编辑后:看起来您必须访问另一个名为 value 的变量(未初始化)该变量应该使用 0 的值进行初始化,否则代码甚至无法编译...
  • @LuiggiMendoza Double value; 也许......谁知道呢?
  • 这是变量声明,不是初始化。除非您为其设置值,否则无法使用本地未初始化变量,它们不会使用类字段等默认值进行初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-04
  • 2022-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多