1. 程式人生 > >20172313 2017-2018-2 《程序設計與數據結構》第八周學習總結

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

電腦 ima 程序員 研究 ces ever oid 利用 新的

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

教材學習內容總結

  1. 了解了在多態引用時的後綁定的概念。
  2. 學習練習如何利用繼承方式來實現多態性。
  3. 學習練習如何利用接口來實現多態性。
  4. 初步學習算法,了解學習了兩種對數組中的元素進行排序的方法。
  5. 了解學習了兩種在一組元素中尋找一個指定的目標元素的方法。
  6. 初步學習判斷何時使用多態性設計對問題進行解決,並體會利用多態性所帶來的好處。

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

  • 問題1:在剛剛開始學習利用接口實現多態性的時候感覺很奇怪,因為在原來學習接口的時候的時候知道Java中的接口是一組常量和抽象方法的集合,接口不能被實例化。在看到樹上的舉例 Speak special() = new Philosopher();的時候感到很疑惑,不明白為什麽接口可以被實例化。
  • 問題1解決方案:隨著學習的深入後,了解到這裏並不是對接口自己本身實例化,而是用於聲明一個對象引用變量指向實現該接口的類的對象。
  • 問題2:在學習對一組元素進行排序的時候有這樣一段代碼
 public static void selectionSort(Comparable[] list) {
        int min;
        Comparable temp;
        
        for (int index = 0; index < list.length - 1; index++) {
            min = index;
            for (int scan = index + 1; scan < list.length; scan++)
                if (list[scan].compareTo(list[min]) < 0)
                    min = scan;
           
            // Swap the values
            temp = list[min];
            list[min] = list[index];
            list[index] = temp;
        }
    }
  • 這裏的temp是一個Comparable類的對象,不明白為什麽可以用list[min]對它進行賦值。
  • 問題2解決方案:對書本上的知識繼續學習並結合藍墨雲上的視頻學習後,這裏的list數組是一個形式參數,而在傳入的實際參數數組中保存的是一個個Contact對象,這裏是利用了多態使得對象引用變量指向其他的對象。
  • 問題3:在開始學習二分搜索法的時候,看到書上給的示例,就想到如果待搜索的元素個數為偶數的話,就會有兩個中點值,那麽這個時候要怎麽取中點?雖然書上後面也進行了解釋,不是很理解書上想要表達的意思。
  • 問題3解決方案:王老師在上課的時候對該問題進行了解答,因為是取中點,所以對兩個數取平均值在進行類型轉換轉換為int行,這時候小數部分就被忽略掉了,這也就是書上所說的取兩個中點的第一個為新的中點。

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

  • 問題1:在做編程項目pp10.4的時候發現用兩種方法進行排序得到的結果不一致。
    技術分享圖片

  • 問題1解決方案:我檢查了一遍算法的代碼,因為是根據書上的例題進行改寫的,所以我就把目光放到了測試代碼上,經過仔細的檢查後,發現在我進行第二次排序的時候傳入的實際參數錯了,對參數進行改正代碼就可以成功運行了。
    技術分享圖片

  • 問題2:在做編程項目pp10.5的時候運行代碼的時候提示了Exception in thread "main" java.lang.NullPointerException
    技術分享圖片

  • 問題2解決方案:一開始的時候我認為是由於我沒有在Movies類中寫排序的方法,我完成排序的操作是在測試時通過調用其他類的方法來完成的。我對代碼進行了修改,可問題依舊沒有得到解決。
    技術分享圖片
    技術分享圖片
    技術分享圖片

  • 我實在是找不出有什麽問題,只好求助於百度,找到了以下的解釋。我開始按照這個思路來找我的問題所在,原來在書上的例題中有一段擴充數組容量的代碼,由於數組初始化的大小是100,在進行排序的時候,數組並未全部儲存元素,有一部分為空所以也就導致了我上面問題的發生,我對這一段代碼修改成如下,問題得以解決。
    技術分享圖片
    技術分享圖片

代碼托管

技術分享圖片

上周考試錯題總結

  • 錯題1: Inheritance through an extended (derived) class supports which of the following concepts?
    A . interfaces
    B . modulary
    C . information hiding
    D . code reuse
    E . correctness
  • 解析 通過擴展一個類並繼承它,新類不必重新實現任何這些繼承的方法或實例數據,從而節省了程序員的工作量。 因此,代碼重用是為了您的需要擴展它而重用其他代碼的好處。
  • 原因 呃...未理解好題目所想要表達的意思。
  • 錯題2: Which of the following is an example of multiple inheritance?
    A . A computer can be a mainframe or a PC
    B . A PC can be a desktop or a laptop
    C . A laptop is both a PC and a portable device
    D . A portable device is a lightweight device
    E . Macintosh and IBM PC are both types of PCs
  • 解析 多重繼承意味著一個給定的類繼承了多個父類。 在上面列出的那些選項中,筆記本電腦繼承了來自PC和便攜式設備的特性。 A,B和E中的答案都是單個繼承的例子,其中一個類至少有兩個子類(在A中,計算機有兒童大型機和PC,B,PC有兒童臺式機和筆記本電腦,E,PC有孩子Macintosh 和IBM PC)。 答案D表示一個類的屬性。
  • 原因 對繼承的概念理解混淆不清。
  • 錯題3: A variable declared to be of one class can later reference an extended class of that class. This variable is known as
    A . protected
    B . derivable
    C . cloneable
    D . polymorphic
    E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
  • 解析 多態意味著變量可以有多種形式。 在普通情況下,Java被強烈定義,即一旦聲明為某個類型的變量永遠不會變為不同的類型。 這是一個例外,多態變量可以是任何類型的派生類(盡管不是同時,變量可以從一種類型變為另一種類型)。
  • 原因 我以為這道題是想問變量前面要聲明為什麽類型,沒有理解題意。
  • 錯題4: If you instantiate an Abstract class, the class or object you wind up with
    A . is also an Abstract class
    B . is a normal class
    C . is an Interface
    D . is a reference to an Object
    E . can‘t exist you cannot instantiate an Abstract class
  • 解析 你只能實例化具體類而不是抽象類。 但是你可以擴展抽象類和接口。
  • 原因 我把提意理解成寫抽象類的子類的類型是什麽...(英語不好是硬傷)

結對及互評

  • 博客中值得學習的或問題:
    • 排版精美,對於問題研究得很細致,解答也很周全。
  • 代碼中值得學習的或問題:
    • 代碼寫的很規範,思路很清晰,繼續加油!

點評過的同學博客和代碼

  • 本周結對學習情況
    • 20172332
    • 結對學習內容
      • 第10章 多態性

其他

感覺這周的學習任務相較與上周又有了一定的提升,學起起來也更困難,但同時也是我更加意識到Java的學習是通過不斷的親身實踐和練習才能不斷提高的,書本上的內容和老師上課所講的不過是理論而已,只能輔助你學習,不能完全依賴上課聽講,死啃書本。同時,在這周的測試中我也意識到了一個問題,很多題目的錯誤都是由於我對題目的翻譯不到位導致理解錯了題意所以導致了錯誤,希望在以後的學習生活中能繼續不斷提高自己的英語能力。也希望自己能在以後通過努力不斷進步!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 126 1/1 20/20
第二周 388/466 1/2 15/35
第三周 706/1162 1/3 17/52
第四周 1104/2266 1/4 20/72
第五周 1126/3392 1/5 15/87
第六周 906/4298 1/6 20/107
第七周 1233/5531 1/7 20/127
第八周 1391/6922 1/8 24/151
  • 計劃學習時間:24小時

  • 實際學習時間:24小時

  • 改進情況:
    開學也有將近半個學期了,雖然自己的學習狀態相比於剛開學的時候有了一定的提升,但是相比於他人還是感到自己的學習時間不夠多,學習態度不夠端正,在以後的學習正活中多學Java,我愛Java,Java使我快樂,Java使我身心愉悅!

參考資料

  • 《一般報java.lang.NullPointerException的原因有以下幾種》

  • 《Java程序設計與數據結構教程(第二版)》學習指導

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