0

我正在开发一个小型应用程序,我想获得一个数学函数和 x (a,b) 的范围并显示它的图形。

在某些时候,我调用了一个执行 x 函数的方法。我很清楚我从 TextField 获取函数(例如 f(x)= 2*x+1 )并将其用作 Java 代码

比方说:

class Myclass extends JFrame{
    blah blah ...
    JLabel lblFx =new JLebel("f(x=)");
    JTextfield Fx = new JTextField();

    //and lets say that this method calculate the f(x).
    //get as argument the x
    double calculateFx(double x){
        return  2*x+1; // !!!!BUT HERE I WANT TO GET THIS 2*x+1 FROM TextField!!!!!
    }

}

任何想法?

4

3 回答 3

5

您可以使用脚本引擎。请参阅下面的示例,您可以适应使用 JTextField 的内容。

注意:"2x+1"不是一个有效的表达式,你需要包含所有的操作符,所以在这种情况下:"2*x+1".

public static void main(String[] args) throws ScriptException {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");

    String formula = "2 * x + 1"; //contained in your jtextfield

    for (double x = 0; x < 10; x++) {
        String adjustedFormula = formula.replace("x", Double.toString(x));
        double result = (Double) engine.eval(adjustedFormula);
        System.out.println("x = " + x + "  ==>  " + formula + " = " + result);
    }
}

输出:

x = 0.0  ==>  2 * x + 1 = 1.0
x = 1.0  ==>  2 * x + 1 = 3.0
x = 2.0  ==>  2 * x + 1 = 5.0
x = 3.0  ==>  2 * x + 1 = 7.0
x = 4.0  ==>  2 * x + 1 = 9.0
x = 5.0  ==>  2 * x + 1 = 11.0
x = 6.0  ==>  2 * x + 1 = 13.0
x = 7.0  ==>  2 * x + 1 = 15.0
x = 8.0  ==>  2 * x + 1 = 17.0
x = 9.0  ==>  2 * x + 1 = 19.0
于 2012-07-27T14:54:03.240 回答
3

您要查找的内容eval在某些语言中称为“”;但是,Java 没有直接的东西。

Java 确实有一个名为“ ”的脚本接口javax.script,它支持用其他语言(如 JavaScript、Ruby、Python 等)编写的代码的“eval”,还有一个名为“ ”的工具包javax.tools,它提供对 Java 编译器的访问(以及其他工具)。对于高级程序员,另一种方法是使用解析器生成器从文本字段中解析字符串并以某种方式解释它。

不幸的是,对于初学者来说,这些都是高级概念。考虑用另一种直接支持“eval”的语言编写程序。

于 2012-07-27T14:51:05.910 回答
0

我发现了这个很棒的 Expr库!

“这个包解析和评估浮点数上的数学表达式,比如 2 + 2 或 cos(x/(2*pi)) * cos(y/(2*pi))。

设计重点是易于使用并带有有用的错误消息、易于集成到小程序中以及良好的性能:快速评估和较短的下载时间。功能和灵活性并不是最重要的,但代码足够简单,应该不难根据您的喜好进行更改。”

在我的例子中

class Myclass extends JFrame{
    blah blah ...
    JLabel lblFx =new JLebel("f(x=)");
    JTextfield Fx = new JTextField();
    String formula = Fx.getText();//2*x+1  OR  cos(x) OR lot of other functions

    //and lets say that this method calculate the f(x).
    //get as argument the x
    double calculateFx(double x){
        // The Expr Object that will representing the mathematical expression
        Expr expr = null;

        try {
            // parsing function formula to mathematical expression
            expr = Parser.parse(formula);
        } catch (SyntaxException e) {
            System.err.println(e.explain());
            return;
        }

        // Define(make) what will be the variable in the formula, here x
        Variable vx = Variable.make("x");
        // Set the given value(x) in variable
        vx.setValue(x);

        //return (mathematical) expression's value. See more for Expr lib how work...
        return expr.value();//
    }

}

最后,在您的项目调用calculateFx(x)中,对于给定的 x,您将获得 f(x) 值!

于 2016-08-23T12:12:16.800 回答