20172316 2017-2018-2《程序設計與數據結構》第九周學習總結

20172316 2017-2018-2《程序設計與數據結構》第九周學習總結

教材學習內容總結

  • 第十一章:異常
  1. 異常處理,對於異常有三個選擇:不處理、發生時處理和在某個位置集中處理,常見的異常有ArithmeticExceptionNullPointerExceptionIOException等。
  2. 未捕獲的異常,異常不進行處理的話,程序就會被終止,以後的語句都不會執行。解決方法是↓↓↓
  3. try-catch語句,使用try語句包括要執行的、可能發生異常的語句,而後使用catch子句處理異常,每一個catch語句處理對應的異常。
  4. finally語句,放在try-catch語句後面,不論try語句塊中是否發生異常,finally都將執行。
  5. 異常類層次結構, Throwable類是Error,Exception類的父類
  6. 異常的可檢測與不可檢測,可檢測異常要由方法捕獲,或者由throws語句列出。不可檢測異常則不須要。
  • 第十二章:遞歸
    總結:一個方法調用本身就是遞歸。在編程中是很是實用的。

教材學習中的問題和解決過程

拋出和捕獲是什麼意思?聽起來一個是拿來一個是丟掉,因此它們是反義詞、兩個相反的操做嗎?書上對這兩個術語的描述不甚詳細。html

經過網上資料進行總結理解:拋出異常是方法自己不進行處理,這個異常須要調用方法的時候進行處理;
捕獲異常是在方法自己本身將異常進行處理。git


代碼調試中的問題和解決過程

  • 問題1:PP12.9利用遞歸方式列出楊輝三角的某一行,獲得的結果很是的奇葩,有時候又很接近。
  • 問題1解決方案:第一,檢查代碼,發現很明顯的一個錯誤:
if (n == 2) {
            result.add(1);
            result.add(1);
        }
        else{
        result = pascal(n - 1);
        for (int i = 1; i > n - 1; i++) {
            int temp = result.get(i) + result.get(i - 1);
            result.set(i, temp);
            }

(經過for循環對第2~n-1個數字進行運算)要不是巧合,這裏差點就成了一個死循環,i > n - 1顯然是不對的。編程

修改再檢驗,發現獲得第四行的結果數組

[1,3,4,1]

本覺得離成功還差一步,但這一步不知道哪裏走錯了,數據結構

那就根據遞歸一步一步從第2行到第4行計算,反正不長。
第2行:[1,1] √
第3行:[1,2,1] √
第4行:[1,3,4,1] ×學習

再由for一步一步分析,[1,2,1]→[1,3,1]→[1,3,4]→[1,3,4,1]
因此這裏的「4」應該是「3+1」的結果,可知問題出在取對應值時取的是計算後的值而非上一行的值。
修改:設計

if (n == 2) {
            result.add(1);
            result.add(1);
        }
        else{
            result = pascal(n - 1);
            ArrayList<Integer> result2 = new ArrayList<Integer>();
            result2.add(1);
            for (int i = 1; i < n - 1; i++) {
                int temp = result.get(i) + result.get(i - 1);
                result2.add(temp);
                }
                result2.add(1);
            result = result2;
        }

取另外一數組進行暫存數據,再進行計算,能夠解決問題。3d


代碼託管

(statistics.sh腳本的運行結果截圖)調試


上週考試錯題總結

  • 錯題1: All run-time Errors throw Exceptions.
    正確答案:B.false
    緣由:結果顯而易見,若是咱們用try-catch語句就能夠不拋出了。code

  • 錯題2:A try statement must have at least one catch statement, but could have many catch statements, and may or may not have a finally clause.
    正確答案:A.true
    緣由:點錯了,使用try以後必需要有至少一個catch,至少在IDEA中若是沒有接下來的catch就會出現紅線提示,finally是無關緊要的,有需求就能夠用。


學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 195/195 1/4 20/20 對代碼產生了很大興趣
第二週 309/504 1/5 20/40 打字速度明顯提高
第三週 311/815 2/7 25/65
第四周 474/1289 1/8 30/95 抗...抗壓能力增強?
第五週 260/1549 1/9 15/110 瞭解到預習的重要性
第六週 358/1907 2/11 20/130 打字速度明顯提高
第七週 780/2687 2/13 15/145 學會使用JUnit
第八週 2124/4811 2/10 15/160
第九周 967/5778 2/12 20/180 遞歸思想的利用

結對互評

唐才銘19:總結的問題很是多,可是都解決了;在內容總結上對於過於簡單的內容(如:漢諾塔問題,僅僅做爲一個遞歸的應用例子出現)能夠選擇略去不提。
王文彬29:對問題問得很深刻,因此解決得也挺仔細的;也有把書上的小標題直接看成總結寫入「教材內容總結」的問題,我的以爲這是過於侷限於教材了。

參考資料

相關文章
相關標籤/搜索