猿问

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

我在我的项目中使用 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());


侃侃尔雅
浏览 116回答 2
2回答

慕侠2389804

你为什么要那样做?你正在混合参数值和源代码。所以你问的是不可能的。Java 预编译代码,但如果您所做的工作可行,则需要运行时编译。Expression 构造函数Expression(java.lang.String expressionString, PrimitiveElement... elements)接受可变数量的元素。您甚至可以传递一组 PrimitiveElement 实例:Argument[]&nbsp;arguments=new&nbsp;Argument[3]; arguments[0]==new&nbsp;Argument("x",2); arguments[1]=new&nbsp;Argument("y",3); arguments[2]=new&nbsp;Argument("z",4);Expression&nbsp;e&nbsp;=&nbsp;new&nbsp;Expression(formula,arguments);看起来足够灵活。或者你能解释一下为什么这对你的情况不是一个有用的解决方案。重新审理您的最后一个案例时:&nbsp;&nbsp;&nbsp;&nbsp;HashMap<String,&nbsp;Argument>&nbsp;map4&nbsp;=&nbsp;function_2(list); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;formula="(A+A)*100"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression&nbsp;e&nbsp;=&nbsp;new&nbsp;Expression(formula,map4.values().toArray(new&nbsp;Argument[0])); &nbsp;&nbsp;&nbsp;&nbsp;System.out.println("result=&nbsp;"&nbsp;+&nbsp;e.calculate());Argument... 只接受一系列 Argument 实例或 Argument 类型的数组。map4.values().toArray(new Argument[0])将值参数列表转换为数组。该参数new Argument[0]只是返回正确类型的数组所必需的。

汪汪一只猫

我在我编写的函数中返回动态值作为结果。(例如,A、B 和 C(所有参数类型))我必须根据函数的结果自动创建一个表达式。例如;&nbsp;比如3个值返回(A,B,C)应该是这样;Expression&nbsp;e2&nbsp;=&nbsp;new&nbsp;Expression&nbsp;("(A&nbsp;*&nbsp;B)&nbsp;*&nbsp;(C-100)",&nbsp;A,&nbsp;B,&nbsp;C);如果2个值返回(A, B, C)应该是这样;Expression&nbsp;e2&nbsp;=&nbsp;new&nbsp;Expression&nbsp;("(A&nbsp;*&nbsp;B)&nbsp;/&nbsp;10",&nbsp;A,&nbsp;B);如果 1 返回 (A) 应该是这样的;Expression&nbsp;e2&nbsp;=&nbsp;new&nbsp;Expression&nbsp;("(A&nbsp;*&nbsp;15)",&nbsp;A);也就是说,我必须根据下一个数字自动编写这些表达式。那我就用calculate()函数来计算。
随时随地看视频慕课网APP

相关分类

Java
我要回答