20172305 《程序設計與數據結構》第九周學習總結

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

教材學習內容總結

本週內容主要爲書的11.1-11.6和12.1-12.3的內容:

  • 第十一章

    • 1.異常(try-catch語句、異常類的層次和異常的處理)php

      • 異常是一個定義非正常狀況下或錯誤的對象,錯誤是表明不可恢復的問題而且必須捕獲處理。html

        錯誤與異常都是在程序編譯和運行時出現的錯誤。不一樣的是,異常能夠被開發人員捕捉和處理;而錯誤通常是系統錯誤,通常不須要開發人員處理(也沒法處理),好比內存溢出。
        Exception是java中全部異常的基類。在java中異常被分爲兩大類,編譯時異常和運行時異常。
        Error是java中全部錯誤的基類。錯誤一般是咱們沒法處理的,絕大多數狀況下,咱們不該該試圖捕獲錯誤。java

      • 異常體系具備可拋性,這個特性是Throwable體系中獨有的特色。git

      • throws throw
        區別1 使用在函數上 使用在函數內
        區別2 後面跟異常對象類(能夠多個,逗號隔開) 後面跟異常對象
      • 若是程序不處理異常,則將非正常地終止執行,併產生關於描述在何處發生什麼異常的信息。web

      • try-catch語句能夠捕獲並處理異常,程序將繼續正常執行。算法

      • 每個try-catch語句均可以有一個可選的finally子句,用於定義一段不管是否有異常發生都將執行的代碼。try語句塊能夠沒有catch子句,沒有catch子句時,若是須要仍然可使用finally子句。編程

      • try-catch語句的finally子句的執行與如何退出try語句無關。若是沒有異常產生,try語句塊能夠執行完後將執行finally子句,當拋出異常時,將執行相應的catch子句,而後執行finally子句。數組

      • 經過繼承Exception類創建新的異常類,新的異常類最終是Throwable類的後代類,可使用throw語句。網絡

    • 2.I/O數據結構

      • 流是一個有序的字節數列

      • 標準的I/O流有三種,System類中有三種對象引用變量(in,out和err),分別表明了三種標準的I/O流。System.in爲標準的輸入流--鍵盤,System.out爲標準輸出流和System.err爲標準錯誤流--顯示器屏幕上的一個具體窗口。

  • 第十二章

    • 1.遞歸思想

      • 遞歸是一種編程技術,容許一個方法調用本身以達到最終目的。遞歸是以一種事物自身定義自身的過程。

      • 任何遞歸的定義都必須有結束遞歸選擇的基本狀況。 遞歸方法一定有一條if-else語句,其中的一支做爲檢測基本狀況的值。

      • 直接遞歸:方法調用本身的遞歸。
      • 間接遞歸:若是一個方法調用其餘方法,最終致使再次調用本身的遞歸。
    • 2.迷宮旅行和漢諾塔問題

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

  • 問題1:異常類的方法和異常類的體系
  • 問題1解決方案:在Throwable類中方法裏面找到了每次出現異常的時候拋出的錯誤提醒和異常何處的問題。getMessage()[返回此 throwable 的詳細消息字符串。]和getStackTrace()[提供編程訪問由 printStackTrace() 輸出的堆棧跟蹤信息。]兩個方法產生的。其中的Exception算是全部異常的父類,其下的全部子類都是每個相對具體的異常。異常的規定也是按照一種編寫類的方式,編寫類中方法的方式進行構造的。

    • Throwable類是Error和Exception類的父類。
    • Throwable 類是 Java 語言中全部錯誤或異常的超類。只有當對象是此類(或其子類之一)的實例時,才能經過 Java 虛擬機或者 Java throw 語句拋出。相似地,只有此類或其子類之一才能夠是 catch 子句中的參數類型。
    • 異常類的體系結構:
  • 問題2:可檢測異常和不可檢測異常--RuntimeException類
  • 問題2的解決方案:Java中惟一的不可檢測異常是RuntimeException類的對象或該類的後代對象。全部其餘異常都是可檢測的異常。對於可檢測的異常是,發生異常的方法不捕獲和處理該異常,則必須在該方法定義的聲明頭中包含throws子句。

    • 可檢測異常在方法定義的聲明頭中追加一條throw子句,就明確承諾了該方法在異常發生時將拋出或傳遞異常。
    • 不可檢測異常則不須要只用throws子句。
  • 問題3:遞歸和循環
  • 問題3的解決方案:遞歸和循環的差異,我以爲最明顯的就是遞歸的不斷的調用本身的方法,而循環則是否則,經過for、while、do循環進行一次一次的往復運算。遞歸和循環二者徹底能夠互換。若是用到遞歸的地方能夠很方便使用循環替換,而不影響程序的閱讀,那麼替換成遞歸每每是好的。像斐波那契數列、漢諾塔、階乘等問題均可以用遞歸解決。

    遞歸算法
    • 優勢:代碼簡潔、清晰,而且容易驗證正確性。(若是你真的理解了算法的話,不然你更暈)
    • 缺點:它的運行須要較屢次數的函數調用,若是調用層數比較深,須要增長額外的堆棧處理(還有可能出現堆棧溢出的狀況),好比參數傳遞須要壓棧等操做,會對執行效率有必定影響。可是,對於某些問題,若是不使用遞歸,那將是極端難看的代碼。
    循環算法
    • 優勢:速度快,結構簡單。
    • 缺點:並不能解決全部的問題。有的問題適合使用遞歸而不是循環。若是使用循環並不困難的話,最好使用循環。
  • 問題4:字節流和字符流
  • 問題4的解決方案:在java.io包中操做文件內容的主要有兩大類:字節流、字符流,兩類都分爲輸入和輸出操做。在字節流中輸出數據主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入流主要使用Reader類完成。(這四個都是抽象類)在全部的硬盤上保存文件或進行傳輸的時候都是以字節的方法進行的,包括圖片也是按字節完成,而字符是隻有在內存中才會造成的,因此使用字節的操做是最多的。兩種寫入文件的方式,但字節流的使用更重要。

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

  • 問題1:PP12.1while循環轉遞歸
  • 問題1解決方案:判斷是否爲迴文的方法就是頭尾各取一個字符進行比較是否相等,不斷的循環下去。可是在剛開始想的時候,我不知道如何編寫,徹底沒思路。是從while (another.equalsIgnoreCase("Y"))就開始寫仍是就單純的判斷迴文處進行編寫,不管是前者仍是後者都不知道代碼如何去寫。頓覺腦洞的重要性,有一個會編程的腦殼該多好啊!我嘗試了寫前者的代碼,可是每寫一步都舉步維艱,因此放棄着手寫後者,可是後者在哪發生遞歸還是個問題,還有非遞歸的位置,又該如何編寫。在看過同窗編寫的代碼,恍然大悟,對於一個和兩個的字符做爲非遞歸的位置,而較多的字符能夠進行一個遞歸處理,這樣完成了,在用遞歸的main函數裏面進行一個是否繼續繼續下去的遞歸不就行了。
public static boolean Palindrome(String str)
      {
          if(str.length()==1)
              return true ;
          else if(str.length()==2)
          {
              if(str.charAt(0)==str.charAt(str.length()-1))
                  return true ;
              else
                  return false ;
          }
          else if(str.charAt(0)==str.charAt(str.length()-1))
              return Palindrome(str.substring(1,str.length()-1)) ;
          else
              return  false;
      }
  • 問題2:PP11.1和PP11.2的異常處理
  • 問題2解決方案:對於此編程項目,着實費了很多功夫,尤爲是PP11.1的要求,我理解處兩種處理方式,一種是用戶每次輸入的字符串的一個處理,一種是用戶一直在輸入字符串直至輸到DONE的時候,終止輸入而後在判斷整個字符串的一個處理。多是個人理解力有問題致使,因此,我覺的前者能夠先嚐試嘗試,因此個人PP11.1就是按照前者進行編寫的,可是在編寫PP11.2的時候本身不會編寫了,有輒回來寫第二種的代碼,很簡單就搞定了。多是我以前的理解有誤吧。
    • PP11.1

    • PP11.2

  • 問題3:IO操做及異常處理
  • 問題3解決方案:剛聽完IO的問題就要去編寫IO的代碼,感受好恐怖。聽的雲裏霧裏的,尤爲還有一堆的類去理解,用哪一個不用哪一個的問題,對應的writer和reader什麼的,一堆一堆的,好在有老師給的代碼能夠參考。在老師的代碼中有BufferedOutputStream和BufferedInputStream兩種可供理解,兩種字節流可使用,進行往文件裏面寫入讀出。(在文件裏面寫出這兩串數字真不容易......)

    • Buffered緩衝流::BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是帶緩衝區的處理流,緩衝區的做用的主要目的是:避免每次和硬盤打交道,提升數據訪問的效率。
    • ![](https://images2018.cnblogs.com/blog/1333004/201805/1333004-20180512161614361-1642312559.png)
  • 問題4:PP12.楊輝三角的編寫
  • 問題4的解決方案:在以前查遞歸的時候看到過楊輝三角的編寫代碼,也就有了思路能夠參考,編寫起來我把生成的數存放到一個二維數組裏面,再從數組裏面進行調用方法,這樣的話就能夠造成楊輝三角了。可是,在和小組成員進行交流的時候,發現本身好像把題意理解錯了,要求的是輸出楊輝三角的第N行,結果我是全輸出了。在解決這個問題的時候,腦洞大開正好最近在學習I/O流的問題,我把楊輝三角寫入文件中,而後再一行行的調取,存入一個字符串數組中,而後再讀取最後一行即爲要求輸出的一行。方法能夠實現目的,可是感受很費事。暫時尚未想到更好的方法,因此用此方法完成做業了。
    • 楊輝三角的總體輸出:
    • 按要求輸出第N行:

代碼託管

上週考試錯題總結

  • 錯題1:An interface reference can refer to any object of any class that implements the interface.(接口引用能夠引用實現接口的任何類的任何對象。)
    • A.true
    • B.false
  • 錯誤解析:這是使用類名來聲明引用變量的多態函數之一。接口實現多態性,就是如問題所說的那樣,感受本身犯得錯誤很低級,不該該。

  • 本次考試是本身在高鐵上答完的,因爲網絡的不穩定,致使本身答題時間特別長,好在沒有崩掉。本身答題的時候,遇到不會的就是網上查找資源。因此,此次考試在網上查到了不少題,纔會有很高的成績的,其實本身水平並不高,仍是像上週那樣,仍是好好學習才能縮短與好學生的差距。

結對與互評

點評(方藝雯)

  • 博客中值得學習的或問題:
    • 知識點記錄的很詳細,還有配圖,圖文結合。
    • 沒有什麼問題,很完美的博客。
  • 代碼中值得學習的或問題:
    • 問題分析的很細緻,還配有圖片加以示意,很完美。
  • 基於評分標準,我給本博客打分:15分。
    • 得分狀況以下: - 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 二個問題加2分
    • 代碼調試中的問題和解決過程, 四個問題加4分
    • 感想,體會不假大空的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 代碼規範加1分
    • 有動手寫新代碼的加1分

點評(王禹涵)

  • 博客中值得學習的或問題:
    • 參考資料特別多,能夠看出課下很用功的進行學習。
    • 問題其實不少,並且寫的也很好,可是排版上來看就是很亂很亂的。但願下次能夠改正,版面就會很棒的!
  • 代碼中值得學習的或問題:
    • 代碼的問題,沒什麼問題,但願繼續保持就行。
  • 基於評分標準,我給本博客打分:13分。
  • 得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 五個問題加5分
    • 代碼調試中的問題和解決過程, 二個問題加2分
    • 感想,體會不假大空的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 代碼規範加1分
    • 有動手寫新代碼的加1分

互評對象

  • 本週結對學習狀況
    20172304方藝雯
    20172323王禹涵

  • 結對學習內容:第十一章和第十二章
    • 1.異常

    • 2.I/O流

    • 3.遞歸

    • 4.遞歸應用--迷宮問題和漢諾塔問題

感悟

十一章和第十二章的內容講的是異常和遞歸,並且第十一章中I/O流部份內容在藍墨雲上的視頻一堆,感受本身有點忙不過來。並且立刻快要檢查四則運算的編程實驗了,咱們仨的代碼,分開使用就能夠,合在一塊兒使用就一堆問題,好煩!看完第十二章的內容,感受本書已經學完了一大半,可是感受本身仍是以有不少問題,還有不少不足須要解決。惆悵......本身還有不少不少的關於I/O流的內容沒有看,因此有關I/O流的問題尚未遇到不少,寫的也就少了。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 136/136 1/1 15/15
第二週 570/706 1/2 20/35
第三週 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五週 904/3472 1/6 30/118
第六週 540/4012 1/7 30/118
第七週 826/4838 1/7 30/178
第八週 925/5763 2/9 45/223
第九周 253/6016 2/10 55/278

參考資料

相關文章
相關標籤/搜索