为了账号安全,请及时绑定邮箱和手机立即绑定

如何在函数上动态编写逗号字符(作为参数)?

如何在函数上动态编写逗号字符(作为参数)?

侃侃尔雅 2023-05-10 15:22:13
我在我的项目中使用 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]只是返回正确类型的数组所必需的。


查看完整回答
反对 回复 2023-05-10
?
汪汪一只猫

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()函数来计算。


查看完整回答
反对 回复 2023-05-10
  • 2 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信