簡體   English   中英

計算包含Java中變量的字符串形式的表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM