[問題] 如何做計算機 (分析數學式子)

看板java作者 (挖哈哈思壓)時間9年前 (2015/12/13 00:37), 編輯推噓3(308)
留言11則, 5人參與, 最新討論串1/1
As tile, 今天有一個需求, user會輸入如下面這種數學式子的字串 (((1 + 2) * (3 + 6) / 3) 必須得到這個數學式子的答案(9) 請問這個演算法該怎麼實作? 印象中大學有學過 ... 似乎要用到堆疊之類 (分別push operand and operator?) ... 實在是想不到該用 java 哪些類別跟演算法阿 ... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.186.57 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1449938252.A.75C.html

12/13 00:46, , 1F
演算法是你要自己寫的, java 不會提供
12/13 00:46, 1F

12/13 00:46, , 2F
單論資料結構的話堆疊倒是有 java.util.Stack<> 可以用
12/13 00:46, 2F

12/13 00:56, , 3F
可參考Postfix order
12/13 00:56, 3F

12/13 10:56, , 4F
參考良葛格中序式轉後序式 http://tinyurl.com/pjhelpc
12/13 10:56, 4F

12/13 10:56, , 5F
12/13 10:56, 5F

12/14 19:26, , 6F
依運算式複雜程度(僅四則->三角等工程型函等)以及可使用
12/14 19:26, 6F

12/14 19:27, , 7F
解決方案(可使用現有library甚至網站,如丢個httpget給)
12/14 19:27, 7F

12/14 19:28, , 8F
數學網站求值),所以要看你詳細的需求
12/14 19:28, 8F

12/14 19:29, , 9F
operator precedence和中序轉後序都有其適用範圍限制,最
12/14 19:29, 9F

12/14 19:30, , 10F
標準的一般式的最簡單做法是寫lex & yacc(java版)腳本
12/14 19:30, 10F

12/17 09:08, , 11F
最簡單就mvel,spel,甚至groovy 吧 (誤
12/17 09:08, 11F
文章代碼(AID): #1MR4rCTS (java)
文章代碼(AID): #1MR4rCTS (java)