計算器製作JAVA版(綜述)

wpc0000發表於2008-03-01
實在是不好意思,也不知道前一段時間在忙些什麼,映象中就是吃飯和睡覺了,不知不覺就已經開學過了兩個星期了 。記得第一週老師要求了一個作業--編寫計算器,身為班級一員有必要給大家解析一下這個題目。而且個人感覺作為一個學生給人講程式、講演算法,不僅僅是共享一下程式碼就算完了,而是要引導大家去解決這個問題。更多的是提供現階段廣大同學的知識水平和編碼水平相適應的解題報告。不過,我不太喜歡什麼上來就是做題啊,解題啊的,所以以後更多的會用技術討論性的詞句了。好了,閒話說了這個多了,開始進入正題吧。
當我們面對這樣一個看似簡單,越想越複雜的題目時,得通過逐步分塊逐步求精的思路方法。一般我們看到這個題目時候會逐步想起哪些東西呢?我不知道大家的想法,我的思路是這樣亂成一團的:一個計算器就是計算一個表示式嘛,一個一個計算就好了;不對,因為加減乘除的優先順序問題,又得優先計算乘除法;然後呢,好像還有括號吧,那又優先計算括號裡面的內容了,括號裡面又是一個形如前面的形式,咋成了一個遞迴定義的無限了呢!而且我們還沒有考慮什麼乘方啊,三角函式、算式中間有一些非法符號、括號不匹配什麼的。這種情況下,就得趕快停下來,不能一口吃個胖子吧。記得高中資訊學奧賽的時候就是栽在這道題上的。

那麼下面幾篇文章就會一步一步來解讀這個程式。
我用三塊來將程式劃分開。
首先,我們知道需要計算一個表示式就得保證這個表示式中沒有非法字元 像什麼空格呀、縮排符等等。
其次,我們要保證表示式結構的正確性,主要是括號匹配、運算子、運算元(其實就是數字,那些學者就會用專業詞彙嚇唬人。)的位置正確性。
最後,才是計算表示式。

注意:我們的注意力應該在處理表示式的問題上面,所以大家不要為那些GUI介面和外圍裝置投入大量精力,沒有什麼意義。網上大部分採用的是字尾表示式求值等類似方法,既然大家沒學,我們不會採用這種方法解答;另外有些同學聽到一些新的名詞--棧,就覺得很難,其實沒有,在隨後的解析過程中,我們會發現,這種資料結構會因為解答本程式的需要,會自己浮現到我們面前,所以不用擔心;再則是,要學會自己想辦法,在隨後的文章中,大家會發現,只要是懂得基本的程式設計規則,解決這個問題是沒有困難的(要不然我們高中那會沒有這麼多專業術語,咋搞啊)。
補充兩句,如果有哪些地方可以加評論詢問,本人表達能力有限所以這個學期選個語文好好補補。並且我發現如果無法將自己所學的知識表達出來並且讓他人聽懂是不算一個好學生的。

相關文章