- 課程設計內容
設計一個簡易的算術運算器,可實作多位數(整數和浮點數)的加、減、乘、除等基本的算術運算,可通過圓括號來改變運算優先級別,圓括號可多層嵌套,
- 2. 課程設計要求
- 運算規則為:按運算優先級從高到低進行運算,同級別的運算子,按從左至右運算;有括號出現時先算括號內的,后算括號外的,多層括號由內向外進行,
- 程式運行后,從鍵盤輸入算術表達(中綴運算式),要求對輸入的運算式進行合法性檢測,包括字符的合法性、圓括號的匹配等,
- 輸入合法的中綴算術運算式,程式給出運算結果
頁面大概長這樣子

例外機制
原因:Android模擬器運行碰到空指標例外或者一些常見錯誤很容易直接停止運行,所以增加例外機制,極大地減少了運行停止的情況,計算器通常都能穩定的正常運行,也能保證每次保存上次的結果并在此基礎上繼續運算.例如當你的運算式出現不符合規則的情況時,例如“+”后面不應該出現其他運算子(括號除外), “(”必須與“)”成對出現”,運算子之后沒有數字等就會觸發例外機制
![]()

(2)合法性檢測
- 圓括號的匹配,分別對左右括號進行計數,左右括號的數量必須一致否則會顯“calcFailed”
- 小數點前只能是數字
- 運算子不能相鄰(括號除外)
實作方式: 輸入運算子之前經過多層嵌套篩選,符合條件才能有效加入

負數運算
實作方式:將0插入字串中且跟括號一起使用,例如(-5)在程式中將以(0-5)的形式參與后綴運算式的形成及計算

中綴運算式轉后綴運算式
實作方式:
1.從左至右掃描一遍中綴運算式
2.如果讀取的是運算元,則判斷該運算元的型別,并將該運算元存入運算元堆疊,若讀取的是運算子,①運算子為左括號直接存入運算子堆疊②運算子為右括號,輸出運算子堆疊中的運算子到運算元堆疊,直到遇到左括號為止③運算子為非括號運算子:若運算子堆疊堆疊頂元素為括號,則直接進入運算子堆疊;若比堆疊頂運算子的優先級高或者相等,直接進入運算子堆疊;若比運算子堆疊堆疊頂的運算子優先級低,則輸出堆疊頂運算子到運算元堆疊,并將當前運算子壓入運算子堆疊,
3.當運算式讀取完成后運算子堆疊中尚有運算子時,則依序取出運算子到運算元堆疊,直到運算子堆疊為空,
計算后綴運算式
實作方式:
把上一步回傳儲存后綴運算式的數字堆疊遍歷存盤于陣列1中,另外設定一陣列2用于模擬儲存計算程序,遍歷陣列一:
- 讀取的為數字,則將其儲存在陣列2中
- 讀取的為運算子,則移出陣列2末尾的兩個資料并且經過四則 運算后重新加入陣列2
最后陣列2將只存在一個資料,即最終結果
翻轉小功能
實作方式:
系結TURN按鈕設定點擊事件 若當前頁面為豎直頁面則重新創建Activity為水平頁面; 若當前頁面為水平頁面則重新創建Activity為豎直頁面
最后完整代碼放在gitee上啦需要自取
https://gitee.com/JacksonSpace/android-calculator
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/305496.html
標籤:其他
