我的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
这个解析器非常快,并且具有许多其他功能。
通过绑定到目标C将其移植到Swift的工作已经完成。
免责声明:ParserNG是我创作的。