代碼:https://git.coding.net/Thomaskang/sizeyunsuan.git
先來一張圖片緩解下鴨力。
1、需求分析
做一個小學生四則運算
(1)接受需要的題目數量
(2)0到100之間的整數
(3)每個題至少兩種運算符
(4)不能出現負數和非整數
(5)輸出到一個txt文件中
2、功能設計
用戶交互功能:用於用戶輸入題目數量和獲得運行后的題目文件(包括答案)的文件下載按鈕
后台功能:實現各類實際的需求分析得用戶需求
接受需要的題目數量
0到100之間的整數
每個題至少兩種運算符
不能出現負數和非整數
前后台交互功能:怎樣連接前后台
錯誤提示功能:在用戶輸入不規范等情況下提示錯誤信息
3、設計實現
用戶交互功能:簡單的前台頁面html+css
后台功能:
(1)接受題目數量,前台jsp傳遞通過servlet跳轉傳遞到后台,java類通過參數接收
(2)產生四個隨機數類,得保證在0到100之間,不能有負數和非整數
(3)產生四個隨機字符類,並且對個數和種類得有限制
(4)計算類,運用Java的String中的eval方法進行計算,避免優先級判斷
(5)運用io流文件輸出到一個txt文件中
前后台連接:jsp+servlet
錯誤提示功能:用前台js正則表達式進行限制提醒
4、算法詳解:
對於優先級問題沒必要去討論,java提供了對於Sting里面的數字運算的方法,自動處理里面的優先級,eval()方法,把計算表達式轉換成string進行計算出結果再輸出。這是我原本的想法。接下來,想講下我的辛酸歷程。
有一句話是理想很豐滿,現實很骨感。最后我沒有實現這個功能的全部,僅僅實現了它的一部分,因為在我測試運行的時候出錯了。
在這兒我糾結了將近半天,翻了各種博客,做各種測試,最后的結果是,在一到兩條數據的時候是可以運算的,但當數據循環多了反而不行了,真的很懵。
簡述下關於這點的想法,引入JavaScript的 各種包,然后用eval方法。
將每次拼接的表達式放在字符串里面。用ArrayList包容,然后遍歷的去計算,計算后再用ArrayList去接收。
之后用io類進行輸出。
5、測試運行
1、接收題目數量和學號:通過servlet傳遞跳轉,有點多次一舉,原本是想要為了更好的用戶體驗。
2、產生四個隨機數;
3、運算符,這點我覺得寫得不錯,我考慮到了每個運算符出現的概率應該相等。
4.計算結果,雖然沒有完全做完,但我認為我的想法是沒錯的。也貼一些我的運行結果。
5、出題:
7、io輸出:
6、滿意代碼片段
敲了的代碼都挺滿意的。
最滿意的可能就是考慮到了運算符的出現概率和用戶體驗那一塊。
7、總結
總得來說,整個敲代碼的過程其實不是很難,有想法,而且做起來邏輯挺清晰的。
但最后沒有完成的原因,一是因為忙工作室和其他事情把作業拖到了最后時間不夠,二是自己對於某些函數的了解程度和編碼程度都還不夠。
也算是給自己一個警示吧,做一個東西得做好准備,而且得要對面臨的問題又應對措施。
在計算那一步花了很多時間還沒弄出來的時候就應該換思路了,不能鑽牛角尖下次。
給自己留夠時間。
8、展示PSP
任務內容 |
計划完成需要的時間(min) |
實際完成需要的時間(min) |
計划 |
30 |
60 |
· 估計這個任務需要多少時間,並規划大致工作步驟 |
800 |
900 |
開發 |
200 |
300 |
· 需求分析 (包括學習新技術) |
300 |
400 |
· 生成設計文檔 |
30 |
30 |
· 設計復審 (和同事審核設計文檔) |
0 |
0 |
· 代碼規范 (為目前的開發制定合適的規范) |
0 |
20 |
· 具體設計 |
30 |
30 |
· 具體編碼 |
100 |
150 |
· 代碼復審 |
60 |
0 |
· 測試(自我測試,修改代碼,提交修改) |
60 |
80 |
報告 |
30 |
60 |
· 測試報告 |
0 |
0 |
· 計算工作量 |
840 |
1200 |
· 事后總結, 並提出過程改進計划 |
0 |
30 |
關於博客的修改和補充:
在學姐的提醒下,我對我沒有完成的功能進行了再次修改,最終完成了整個項目。
原因在我考慮除號的時候沒有過多的考慮它產生結果的類型。
找了半天終於找到了自己的問題出在了哪里,原來是在對象轉int型的時候馬虎大意出了問題。然后進行了修改。並且將有除號和沒有除號的算式分版塊進行計算。