我在我的项目中使用 MxParser 库。我在下面写了 3 种不同的方式。前两个有效,但第三个(我真正想要的)无效 1) (working) Argument x=new Argument("x",2); Argument y=new Argument("y",3); Argument z=new Argument("z",4); Expression e2=new Expression("(y-x)*100",x,y,z); String result=String.valueOf(e2.calculate()); System.out.println("result= "+result);2) (working) HashMap<String, Argument> map4 = function_2(list); Entry<String, Argument> next4 = map4.entrySet().iterator().next(); Argument a = next4.getValue(); String formula="(A+A)*100"; Expression e = new Expression(formula,a); System.out.println("result= " + e.calculate());3) (not working) HashMap<String, Argument> map4 = function_2(list); Entry<String, Argument> next4 = map4.entrySet().iterator().next(); Argument a = next4.getValue(); String formula="(A+A)*100"; String s=","; // This line is Dİfferent Expression e = new Expression(formula+s+a); // This is too System.out.println("result= " + e.calculate());
2 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
你为什么要那样做?你正在混合参数值和源代码。所以你问的是不可能的。Java 预编译代码,但如果您所做的工作可行,则需要运行时编译。
Expression 构造函数Expression(java.lang.String expressionString, PrimitiveElement... elements)
接受可变数量的元素。您甚至可以传递一组 PrimitiveElement 实例:
Argument[] arguments=new Argument[3]; arguments[0]==new Argument("x",2); arguments[1]=new Argument("y",3); arguments[2]=new Argument("z",4);Expression e = new Expression(formula,arguments);
看起来足够灵活。或者你能解释一下为什么这对你的情况不是一个有用的解决方案。
重新审理您的最后一个案例时:
HashMap<String, Argument> map4 = function_2(list); String formula="(A+A)*100"; Expression e = new Expression(formula,map4.values().toArray(new Argument[0])); System.out.println("result= " + e.calculate());
Argument... 只接受一系列 Argument 实例或 Argument 类型的数组。map4.values().toArray(new Argument[0])
将值参数列表转换为数组。该参数new Argument[0]
只是返回正确类型的数组所必需的。
汪汪一只猫
TA贡献1898条经验 获得超8个赞
我在我编写的函数中返回动态值作为结果。(例如,A、B 和 C(所有参数类型))
我必须根据函数的结果自动创建一个表达式。
例如; 比如3个值返回(A,B,C)应该是这样;
Expression e2 = new Expression ("(A * B) * (C-100)", A, B, C);
如果2个值返回(A, B, C)应该是这样;
Expression e2 = new Expression ("(A * B) / 10", A, B);
如果 1 返回 (A) 应该是这样的;
Expression e2 = new Expression ("(A * 15)", A);
也就是说,我必须根据下一个数字自动编写这些表达式。
那我就用calculate()函数来计算。
添加回答
举报
0/150
提交
取消