java - Android 与数学解析器

标签 java android parsing math

我的 Android 程序有问题。我使用 mxparser 作为我的数学解析器。我将它添加到我的库中。使用此命令输入程序后,没有显示任何错误,但当我在运行时单击某个按钮时,程序会出现错误。我尝试调试它很多次,我确信错误来自解析器。有什么想法吗?

  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

更新2:

我编辑了代码:

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 的原因。

更新3:

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

最佳答案

这篇文章发表已经三年了。您可以使用开源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

这个解析器速度相当快,并且有很多其他功能。

通过绑定(bind)到 Objective C 将其移植到 Swift 的工作已经完成。

更新

由于评论中的请求,我已创建 Android 端口作为您项目的简单依赖项。

你可以得到here

或者只是将其添加到存储库末尾的根 build.gradle 中:

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

还要添加到应用程序的 build.gradle 文件中,在依赖项下添加:

dependencies {
            implementation 'com.github.gbenroscience:parserng-android:0.1.1'

    }

免责声明:ParserNG 由我创作。

关于java - Android 与数学解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957885/

相关文章:

java - 如何从 Java 中的 Cloud Function 触发 Cloud Dataflow 管道作业?

android - 手机间隙 : ajax + jsonp working on PC but not in Android

java - android 数据库中我缺少的列在哪里?

python - 用于解析体育比赛数据的自然语言解析器

ruby - 删除 CSV 文件中的空格

python - 使用 python etree 从 xml 中删除模式

java - DrawMatching between two images - 图像识别

java - Spark : createDataset() into a Dataset<Row>?

java - Java 中 boolean 数组的奇怪损坏

android - Google 开发者帐户(发布者)