需求分析(描述自己對需求的理解,以及后續擴展的可能性)
1.代碼要滿足加減乘除的運算,包含括號,支持真分數
2.對象選擇生成四則運算題目的數量
3.手動輸入結果
4.題目要可以驗證結果正確與否並統計正確率
5.要輸出文件
6.可以支持多運算符
7.將程序的過程寫入文件
8.最好使用棧的方式,中綴轉后綴
9.對象可以選擇題目運算符的數量決定題目的難度
設計思路
1.先將代碼的結構構建好,即先寫輸出題目的數量
2.通過for循環設計隨機出現的題型,包括真分數題型
3.編寫不同類型的題型並檢驗
4.編寫題目出現后的輸入及對應的語句,最后調用NumberFormat
類統計正確的概率
5.通過BufferedWriter
的類寫入名字為LX的txt文件,建立一個棧,把每次循環生成的題目壓入棧內
6.測試
7.編寫一個中綴轉后綴的類並編寫測試代碼使用,最后加入主代碼中
實現過程中的關鍵代碼解釋
BufferedWriter bw = new BufferedWriter(new FileWriter("LX.txt"));
ArrayList<String> list = new ArrayList<String>();
建立棧,把for循環生成的題目使用 list.add("題目" + (i + 1)+":");
壓入
for(String i:list){
bw.write(i);
bw.newLine();
}
bw.close();
把每次壓入棧內的內容通過迭代器寫入文件,並添加空行,最后關閉。
測試方法
通過輸入數量決定生成題目的數量,並且題型隨機,最后統計正確率,並且檢查生成的txt文件是否包含了對應的四則運算題目。
運行過程截圖
代碼托管
遇到的困難及解決方法
1.關於如何將程序運行結果寫入txt文件的問題
解決過程:我先翻閱了教材上IO流的代碼,里面只教了如何通過循環寫入多行代碼,便舍棄。於是我通過網上搜索,找到了一段代碼
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入你要保存的字符:");
//讀取一個文本行
String str=br.readLine();
//創建一個新的File對象
File f=new File("testio.txt");
//創建一個新的文件testio.txt
FileOutputStream fos=new FileOutputStream("testio.txt");
//寫到文本
fos.write(str.getBytes());
//關閉輸出流
fos.close();
通過實踐發現這種方式每次寫入一行內容都要生成一個fos,相比書上的方法較為簡單,但仍有麻煩之處。不過為我后來的代碼提供了思路,這里不得不提一下張旭升和王彪同學,在張旭升和王彪同學幫助下,幫我梳理了代碼結構,並提出了迭代器和棧的方法解決該問題,再次感謝。
對結對的小伙伴做出評價(重點指出需要改進的地方)
這次我和小伙伴齊力鋒同學有了明確分工,我負責完善四則運算的代碼和分數類及其測試,齊力鋒則時寫中綴轉后綴的類和自動生成題目的類。在第一周我們設計了不用棧的方式來進行四則運算,第二周我們則另外做了一個可以用棧方式的四則運算,所以我們用了兩種方法來完成這個題目。我認為齊力鋒同學的設計思路很有邏輯性,並且自己總結並做了中綴轉后綴的類,很厲害。我認為我們都需要更多地動手實踐,只有多做才能多學嘛。
對於搭檔代碼的理解
關於搭檔的中綴轉后綴,通過深入學習,有了自己的理解。他利用了調度場算法,先建立一個堆棧,存儲暫時還不需要處理的運算符,根據運算符級別的高低決定順序,例如,先掃描級別較高的運算符,若遇見括號則先壓入,直到掃描到右括號再把左括號之后的所有彈出。
PSP記錄
Personal Software Process Stages | 預估耗時(分鍾) | 實際耗時(分鍾) |
---|---|---|
計划 | 60 | 60 |
估計這個任務需要多少時間 | 360 | 720 |
生成設計文檔 | 5 | 5 |
設計復審 (和同事審核設計文檔) | 5 | 5 |
開發 | 30 | 30 |
需求分析 | 20 | 10 |
具體編碼 | 240 | 360 |
測試 | 20 | 30 |
測試報告 | 60 | 30 |
事后總結, 並提出過程改進計划 | 20 | 10 |