使用ScriptEngine计算字符串中的数学公式



这是我的代码:

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

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

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

并且我在终端中返回了CCD_ 2。


这是我的代码,其中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是我的类中的全局变量

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

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)。

最新更新