[英]evaluating an expression in string form containing variables in Java
我已經使用了EvalEx( https://github.com/uklimaschewski/EvalEx )並對其進行了修改,以使其成為沒有像Math這樣的軟件包的計算器。 因此,現在它可以從用戶那里獲取字符串形式的輸入並打印出結果。
像這樣 :
Enter an Expression: ADD(DIV(SIN(FACT(3)),CEIL(TAN(MUL(1.5,FIB(4))))),GCD(2,10))
The Result is: 1.94
現在用戶將輸入包含變量而不是常量的表達式
ADD(DIV(SIN(FACT(X1)),CEIL(TAN(MUL(1.5,FIB(X2))))),GCD(Y,10))
運行時,總體代碼應如下所示:
Enter an Expression: ADD(DIV(SIN(FACT(X1)),CEIL(TAN(MUL(1.5,FIB(X2))))),GCD(Y,10))
Enter Variables: X1,X2,Y
Enter values for X1, X2 and Y by this order(separate the values by space): 3 4 2
The Result is: 1.94
請注意,用戶首先輸入表達式,然后將告訴機器什么是變量(如“輸入變量:x1,x2,y”中所示),我也必須使用目標編程概念(因此,表達式的每個函數及其常數或變量應作為對象保存)
那么如何更改EvalEx的現有代碼以使程序識別變量?
您可以設置Map<String, Double>
將變量名稱與值相關聯,如下所示:
Map<String, Double> values = new HashMap<String, Double>();
values.put("X", 13.5);
values.put("Y", -3);
然后,您可以將表達式中的所有變量替換為其相應的值,如下所示:
for (Map.Entry<String, Double> entry : values.entrySet())
expression = expression.replace(entry.getKey(), entry.getValue().toString());
然后,您可以將已經編寫的方法應用於expression
。
這種方法很簡單,但不是很可靠。 例如,如果您的變量名之一是"C"
,則會使函數"CEIL"
混亂。 因此,您可以堅持所有變量均以"_"
或類似名稱開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.