我在我的項目中使用 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
提交
取消