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

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

教材學習內容總結

1.多態性

  • 多態性引用能夠在不一樣時間指向不一樣類型對象,即運行一致性的方法出現不一致的行爲。
  • 後綁定:
    • 綁定:程序執行時被要求調用某個方法纔可執行某段代碼,叫作綁定。
    • 在多態引用中,這種綁定在程序運行以後才能執行,因此稱爲後綁定或動態綁定。
    • 後綁定的效率較低,由於它要綁定的方法定義取決於當時所引用的對象,可是後綁定的靈活性彌補了它效率低的缺陷。
  • 創建多態性引用的方法有兩種:繼承方式和接口方式。
  • 繼承方式
    • 格式:其中Animal類的一些子類中都有都有move方法
    Animal creature = new Animal();
    creature.move()
  • 接口方式
    • 格式:其中Mover是一個接口
    //創建接口
    public interface Mover
    {
     public void move();   
    }
    //實現接口引用時
    Mover creature;
    creature = new Horse();
    creature.move();

2.排序

  • 選擇排序
    • 例:5 4 6 7 15 0 2 1
      • 0 4 6 7 15 5 2 1(1)
      • 0 1 6 7 15 5 2 7(2)
      • 0 1 2 7 15 5 6 4(3)
      • 0 1 2 4 15 5 6 7(4)
      • 0 1 2 4 5 15 6 7(5)
      • 0 1 2 4 5 6 7 15
  • 插入排序
    • 例:5 4 6 7 15 0 2 1
      • 4 5 6 7 15 0 2 1(1)
      • 4 5 6 7 15 0 2 1(2)
      • 4 5 6 7 15 0 2 1(3)
      • 0 4 5 6 7 15 2 1(4)
      • 0 1 4 5 6 7 15 1(5)
      • 0 1 2 4 5 6 7 15
  • 排序算法的比較
    • 選擇排序和插入排序實質上具備相同的效率,但選擇排序交換的次數更少,所以優於插入排序。

3.搜索

  • 被搜索的一組元素稱爲搜索池。
  • 線性搜索:從起點開始逐步搜索,將目標元素與每一個元素依次比較直至找到目標或搜索到終點後發現找不到目標元素。
  • 二分搜索:當數組是有序的時,能夠採用不斷尋找中間值的方法來找到目標元素。(當搜索元素個數爲偶數時,中間值計算將忽略小數部分)

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

  • 問題1:看書的時候不是很理解排序算法的效率到底是怎麼來的,n^2還好理解,可是n㏒₂n是怎麼得出的就不是很清楚了
  • 問題1解決方案:上網查了一下排序算法有八種,其中對於如何獲得n㏒₂n的,堆排序解釋的比較清楚,可是堆排序的定義博客裏解釋了好久直接粘貼過來太佔用篇幅,因此僅把地址放過來,這裏只放如何計算效率的解釋:
  • 除此以外,還有一種桶排序(定義:將陣列分到有限數量的桶子裏。每一個桶子再個別排序,但有可能再使用別的排序算法或是以遞迴方式繼續使用桶排序進行排序)提供了比n㏒₂n效率更高的方法:假設有n個數字,有m個桶,若是數字是平均分佈的,則每一個桶裏面平均有n/m個數字。若是對每一個桶中的數字採用快速排序,那麼整個算法的複雜度是 O(n + m * n/m*log(n/m)) = O(n + nlogn - nlogm)從上式看出,當m接近n的時候,桶排序複雜度接近O(n)

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

  • 問題1:作PP10.5時movies提示錯誤
  • 問題1解決方案:使用Alt+Enter找不到解決方法,因而詢問告終對的張昊然同窗,發現直接引用之前的DVD類是不行的,還須要加一個compareto方法。

代碼託管

上週考試錯題總結(正確爲綠色,錯誤爲紅色)

  • 錯題1:Which of the following is true regarding Java classes?
    • A . All classes must have 1 parent but may have any number of children (derived or extended) classes
    • B . All classes must have 1 child (derived or extended) class but may have any number of parent classes
    • C . All classes must have 1 parent class and may have a single child (derived or extended) class
    • D . All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
    • E . All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes
  • 緣由及理解狀況:java中默認Object類的父類是自己。
  • 錯題2:You may use the super reserved word to access a parent class'private members.
    • A . true
    • B . false
  • 緣由及理解狀況:概念不清,正好搞混了,super引用惟一不能引用的就是private變量。
  • 錯題3:In order to determine the type that a polymorphic variable refers to, the decision is made
    • A . by the programmer at the time the program is written
    • B . by the compiler at compile time
    • C . by the operating system when the program is loaded into memory
    • D . by the Java run-time environment at run time
    • E . by the user at run time
  • 緣由及理解狀況:當時尚未學到多態性,如今明白了,多態性是後綁定的,然後綁定取決於當時所引用的對象

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 優勢:教材學習總結有改進,從參考資料的變化也能看出開始下功夫往深想了
    • 問題:在提醒以前錯題放的是錯的,應該總結的是第九章錯題,他放的第十章
  • 代碼中值得學習的或問題:
    • 優勢:本週代碼的優勢不是很明顯...
    • 問題:在引用DVD類和DVDCollection類時其實可使用import,要比直接複製過來簡單許多

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172322
    • 結對學習內容
      • 解決了PP10.5遇到的問題。

其餘(感悟、思考等,可選)

  • 感受這周的內容是學java以來學的時候感受最簡單的了,書上的內容都能理解,看例題也能很快的理解,就當是一次短暫的小休息吧。雖然被四則運算搞得頭昏腦漲
  • 教材複習狀況
    • 複習進度(頁數):0/341
    • 很惋惜,因爲這部分把時間大量花在了四則運算上,沒有進行教材複習...

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 120/120 1/1 9/9
第二週 246/366 1/2 9/18
第三週 785/1121 2/4 15/33
第四周 615/1736 1/5 20/53
第五週 1409/2645 1/6 24/77
第六週 561/3206 1/7 20/97 再次搞清了一些本身有點含糊不清的概念
第七週 63/3269 1/8 15/112
第8周 2476/5745 3/11 90/201
  • 計劃學習時間:30小時
  • 實際學習時間:90小時
  • 改進狀況:其實本週大部分時間都在項目開發上,教材學習佔得比例不是很大

參考資料

相關文章
相關標籤/搜索