2014-03-18 26 views
-1

我試圖創建一個簡單的自然語言計算器,並且目前設法將所有操作數轉換爲雙精度和運算符爲字符'+',' - ' '*','/','%'。如何執行算術使用代表+ - * /%的字符

但是,我想使用正確的操作順序來評估表達式,爲此,如果在計算表達式時可以利用Java的自然順序操作,那將會非常有用。有沒有辦法計算這種包含字符操作數的表達式?我在想,也許我的程序可以編寫某種臨時的java類,編譯它並運行它來評估表達式,但這看起來有點過頭了。必須有一個更簡單的方法來做到這一點?

+2

您是否聽說過逆波蘭符號? – gaborsch

+0

我聽說過它,但我不太瞭解它。在這種情況下它將如何有用?我不需要通過表達式來解析它以將其轉換爲後綴符號嗎? – a3onstorm

+1

您可以將您的中綴表達式轉換爲後綴表達式(RPN)(例如,通過推薦的調車碼算法),然後對其進行評估。 – gaborsch

回答

2

沒有辦法使用「Java的自然順序操作」,因爲這是由編譯器實現的,而且您正在運行時工作。您可以使用ScriptEngine爲您完成整個計算。否則,你將不得不實現自己的表達式解析器,使用遞歸下降,這很容易,或者Dijkstra的Shunting-yard算法。

+0

謝謝,我可能會使用ScriptEngine。 – a3onstorm

+0

@GaborSch事實證明有一個+6 upvote,無論如何。 – EJP

1

下面的鏈接顯示您如何評價給出字符串數學表達式: Evaluating a math expression given in string form

所以,你可以連接運營商與雙創建數學公式字符串並使用ScriptEngine的,如上面的鏈接評估。遵循的優先級可以通過適當地使用括號來改變。