Published on

期末專題 - 支援函數的 Android 計算機

使用 Android Studio 開發一款計算機,支援四則運算與函數,用戶可以輸入運算式得知結果,結果會儲存至 SQLite 中,如下圖所示。

如何實作

運算式會以字串方式輸入,當呼叫計算指令時,字串會被解析成已被定義好的「運算單元」,接著將這些運算單元從中序式轉為後序式,接著利用Stack算出結果,簡單來說拆分成下圖:

解析字串

當收到數學式字串,會交給 class ExpressUnitTransformer 轉換,ExpressUnitTransformer 會從 class FunctionManager、class OperatorManager 中判斷為運算符或者函數,最後回傳它們,也就是說它們是依賴的。

解析後會得到 ArrayList<ExpressUnit>,不管數字、函數或運算符都必須繼承 ExpressUnit,它是所有運算單元的基底,且運用 strategy pattarn 實作轉換後序和計算的流程。

(使用 strategy pattarn 的原因是雖運算符不同,但轉換後序或計算的方法是相同的,我希望一個功能不實作兩次以上,因此使用 strategy pattarn 讓運算符選擇各自的轉換、計算策略)

解析完成後就可轉後序式,因為使用 strategy pattarn,因此只須查訪一遍陣列中的 ExpressUnit 並對他們做各自的轉換策略就行(計算時也是相同方法)。 完成後,便可執行已寫好的單元測試,避免算法改變後計算錯誤。