2013-04-25 29 views
-1

我試圖使一個計算器,從一個字符串採用輸入,使用多個參數。使用用戶輸入的動態計算器?

示例: 用戶類型的:14 + 20 * 8

然後,它會做數學和返回的變量。

我看到類似這樣的東西,但代碼對我來說太過先進了,而且它並不是我想要的東西。我查看了其他問題,他們似乎沒有得到這個先進的。

我正在考慮使用一個字符串生成器,然後將每個參數分解爲一個變量,然後以這種方式進行數學運算,但我不太確定該怎麼做。

+0

你真的寫了任何代碼嗎? – 2013-04-25 02:50:07

+0

谷歌解析:幾個鏈接:http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html(C++,但一些不錯的僞代碼),http://www.codeproject.com/文章/ 88435 /簡單指南到數學表達式解析(c#,但應該可翻譯爲java) – mcalex 2013-04-25 02:50:31

+0

@MichaelPerrenoud 我有,但我鉤入這個遊戲稱爲我的世界,我不知道如果在這裏發佈我的bukkit代碼會很好。另外它在我的另一臺電腦上。 – 2013-04-25 02:56:47

回答

1

一個聰明的方法是使用recursive descent parser。對於更簡單的事情,您可以禁止使用括號並要求用戶用空格分隔每個令牌(因此14 + 20很好,但不允許14 + 20),然後使用String#split(「」)來分隔令牌。如果令牌的第一個字符是數字,則使用Integer.parseInt(str)將其轉換爲int;如果你得到一個NumberFormatException那麼這可能是因爲用戶沒有包含空格(並且你試圖將「14 + 20」變成一個整數)

+0

雖然這可能會打破錶達的文物 - 它不會管理PEMDAS規則的複雜性。這個問題**比這複雜得多。** – 2013-04-25 02:53:38

+0

他**應該使用遞歸下降解析器,該解析器在管理PEDMAS方面做得很好,但是從他的問題來看,這聽起來像是他寧願使用rinky無論出於何種原因,均可使用解析器。 – 2013-04-25 02:55:31