带数学解析器的Android

时间:2016-12-04 10:58:53

标签: java android parsing math

我的Android程序存在问题。我使用mxparser作为我的Math Parser。我把它添加到了我的Lib。使用此键入我的程序后没有显示错误,但是当我在运行时单击某个按钮时程序会出错。我尝试了多次调试,我确定错误来自解析器。任何想法?

  private OnClickListener ButtonClicked= new OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
        Function f = new Function("f(x) = "+funcText.getText().toString());
        Expression xlexp = new Expression("f("+xlText.getText().toString()+")",f);
        Expression xuexp = new Expression("f("+xuText.getText().toString()+")",f);
        double c = xlexp.calculate();
        double d = xuexp.calculate();
        String xlString = String.valueOf(c);
        String xuString = String.valueOf(d);
        fxlText.setText(xlString);
        fxuText.setText(xuString);

    }

    };

更新

These are my inputs

这是错误讯息(我认为xD)

谢谢LutzL与我保持联系:D

UPDATE2:

我编辑了代码:

private OnClickListener ButtonClicked= new OnClickListener()
{
@Override
public void onClick(View v)
{
    xlText.getText();
    xuText.getText();

    String firstString=xlText.getText().toString();
    String secondString=xuText.getText().toString();
    double xl = Double.parseDouble(firstString);
    double xu = Double.parseDouble(secondString);

double f=2*xl+1;
double f2=2*xu+1;
String xlstring = String.valueOf(f);
String xustring = String.valueOf(f2);

    fxlText.setText(xlstring);
    fxuText.setText(xustring);

}

};

这很有效。在这段代码中,我得到了xl和xu的值,然后我将它插入到我所做的函数中(2 * x + 1)。但我需要的是一个代码,它也可以从用户那里获得功能。这就是我使用mxparser的原因。

UPDATE3:

我开始调试它并this shows(未找到来源)。不知道这意味着什么。任何的想法? :(

1 个答案:

答案 0 :(得分:0)

此职位发表至今已三年。您可以使用开源ParserNG

它支持算术运算,方程求解,微积分,积分微积分,基本统计量,函数/公式定义,还可以用于图形显示。

计算表达式非常简单:

    MathExpression expr = new MathExpression("(34+32)-44/(8+9(3+2))-22"); 
    System.out.println("result: " + expr.solve());

    result: 43.16981132075472

或者使用变量并计算简单表达式:

 MathExpression expr = new MathExpression("r=3;P=2*pi*r;"); 
System.out.println("result: " + expr.getValue("P"));

或使用功能:

MathExpression expr = new MathExpression("f(x)=39*sin(x^2)+x^3*cos(x);f(3)"); 
System.out.println("result: " + expr.solve());

result: -10.65717648378352

或者在给定点上评估导数(请注意,它在幕后进行了符号微分(不是数字),因此精度不受数值近似误差的限制):

MathExpression expr = new MathExpression("f(x)=x^3*ln(x); diff(f,3,1)"); 
System.out.println("result: " + expr.solve());

 result: 38.66253179403897

在x = 3时一次区分 x^3 * ln(x) 。 您现在可以区分的次数是1。

或用于数值积分:

MathExpression expr = new MathExpression("f(x)=2*x; intg(f,1,3)"); 
System.out.println("result: " + expr.solve());

result: 7.999999999998261... approx: 8

此解析器非常快,并且具有许多其他功能。

通过与Objective C的绑定将其移植到Swift的工作已经结束。

免责声明:ParserNG是我创作的。