1. 程式人生 > 其它 >第二次BLOG

第二次BLOG

1)前言

第四次作業

1.水文資料校驗及處理

2.日期問題面向物件設計

3.圖形繼承

知識點:繼承,正則表示式,多型,日期介面的使用,封裝

難度:偏難

題量:適中

第五次作業

1.日期問題面向物件設計(聚合二)

2.統計Java程式中關鍵詞的出現次數

3.合併兩個有序陣列為新的有序陣列

4.對整型資料排序

知識點:arraylist的使用,正則表示式的使用,簡單演算法排序

難度:適中

題量:偏少

第六次作業

1.正則表示式訓練-QQ號校驗

2.字串訓練-字元排序

3.正則表示式訓練-驗證碼校驗

4.正則表示式訓練-學號校驗

5.圖形繼承與多型

6.實現圖形介面及多型性

知識點:正則表示式的鞏固訓練,介面,繼承,多型

難度:簡單

題量:適中

2)設計與分析:重點對題目的提交原始碼進行分析,可參考SourceMonitor的生成報表內容以及PowerDesigner的相應類圖,要有相應的解釋和心得(做到有圖有真相),本次Blog必須分析的內容如下:

①題目集4(7-2)、題目集5(7-4)兩種日期類聚合設計的優劣比較

類圖:

生成報表:

這個判斷該年剩餘天數是自己加的一個方法,用於判斷年份是否需要改變。

該題目我嚴格按照題目給的類圖進行封裝設計,體會到了封裝的好處,方法呼叫起來比較方便,可讀性也增強了許多,層次比較分明。

day,month,year類裡都有相應的構造方法,檢驗輸入是否合法,數值的變化方法。

②題目集4(7-3)、題目集6(7-5、7-6)三種漸進式圖形繼承設計的思路與技術運用(封裝、繼承、多型、介面等)

7-3

這個題目主要是考查類的繼承,對於繼承類,就是子類繼承父類的辦法,然後避免了程式碼的複用,做這一題的時候是這一次作業的最簡單的一次,因為沒有對比就沒有傷害,其他題目太難了,所以拿到這題的時候,就是千萬不能忽略一點,就是在子類構造器中新增一個輸出語句,答案中有這個點,一定不要忘記這個點,還有就是對於子類中對父類方法的重寫,我認為對於這一題一定要,注意判定輸入值的條件,即半徑或長和寬的長度要大於零。我認為可以採用封裝性,即對類中的屬性進行判斷,然後直接呼叫求面積的方法。我認為這是對類的封裝性的理解。類圖和圈複雜度分析如下。

7-5

該題是影象的繼承與多型,考察的是抽象類,首先這個題目是個50分,是我在題目集中最後寫好的,怎麼說那這題,這是我做的50分的題目中較簡單的題目,其中體現了子類方法的重寫,然後就是主方法的書寫,我認為這道題目主方法比類更復雜一點,類中就是對於求面積的簡單書寫,剛開始我犯了一個錯誤,就是我以為輸出面積只輸出三種圖形的面積總和,我只與測試點一對比因為一測試點巧了,每一個圖形都只有一個,所以輸出的面積只有三個,我就以為自己寫的正確了。然後我就提交了,結果所有的測試資料錯誤全通過了,測試正確的點一個沒通過,然後我又仔細看了看題目,原來要輸出每一個圖形的面積,如果一個圖形一個面積都沒有的話什麼都不輸出,改正後,結果就正確了,這是我寫的最快的一次50分的題目,類圖和圈複雜度分析如下。

7-6

改題目相當於題目5的超級簡化,當然我是先做的這一題,剛開始做這一題的時候,其實也不是很難,這題是介面即多型性,這題就是類繼承介面的方法,然後重寫介面的方法,該子類中使用了封裝性,即對子類的屬性進行限定滿足條件時即可正常使用,這樣的目的是直接對資料進行判斷。我認為這題的主要考點是介面即多型。我認為介面和抽象類的差別是子類可以繼承很多個介面,而抽象類子類只能繼承一個。類圖和圈複雜度分析如下。

③對三次題目集中用到的正則表示式技術的分析總結

這三次的正則表示式難度逐漸減小,好像有意讓我們感受正則表示式技術上的運用,先讓我們知道正則表示式技術的運用挺難的,之後在讓我們練習幾道簡單的正則表示式,感覺正則表示式還是在技術上需要找到相應的表示式一步步的將想要的資訊找到,就我目前來講,我沒有能很好的運用正則表示式的技術,後續需要多加練習。

④題目集5(7-4)中Java集合框架應用的分析總結

題目內容為統計Java程式中關鍵詞的出現次數,在儲存每一行的原始碼,我用到了集合框架中的ArrayList,相當於動態陣列,因為在輸入時並不知道原始碼的行數,因此用ArrayList更加方便。

Map 介面儲存一組鍵值物件,提供key(鍵)到value(值)的對映。Map集合中key是唯一的,即所有鍵值對的key部分都不相同。

    void clear():從映像中刪除所有對映,清空集合,元素個數清0。

    int size(); 獲取集合中元素的個數。

    Set keySet(); 獲取集合中所有的key,返回一個包含所有key元素的Set集合。

3)採坑心得

  1. 在題目集四的第二題中,在對於DateUtil中day、month、year的傳參順序不對,Main類和DateUtil類中引數型別的順序不同。導致最後輸出的結果出現錯誤。
  2. 在日期計算時對於閏年平年的差別沒有處理好,最後導致資料輸出出現偏差。在有關日期的題目中,閏年和平年是要重視和小心的一個點。之後的題目中再碰到要想清楚如何處理再寫。
  3. 在比較兩個日期的地方,由於我是複製了前面差不多的語句來進行小修改,但是我複製完後忘記了進行修改,導致程式碼判斷出現偏差。
  4. 在題目集六中對該字串內的字元進行排序後(按ASCII碼進行升序排序)輸出,我的開始的思路是將字串一個一個分開變為一個數組,在轉化成整型,排序後轉化為char型,最後出現了轉化錯誤。寫題真的不能用這麼複雜的思路,換來換去就容易出錯。
  5. 在寫圖形繼承的那道題時,我將其它類儲存後,我發現原本沒有報錯的Ball類中返回體積値的語句出現報錯,怎麼找都沒找到錯誤。最後發現儲存了其他的類時剩下的類會報錯,把這個類儲存報錯就會消失。

4)改進建議

  1. 對於類與物件的使用還是不熟練,並且很多概念不是很清楚,還是得多多自學類與物件的知識。
  2. 對於複雜的正則表示式還是不會用,只能用來判斷簡單的表示式。
  3. 對於ArrayList要熟練學習它的用法,在之後的一些題目用起來可能會方便一點。
  4. 這次還使用到了介面,這個我之前都不瞭解,要加強對介面的學習。

5)總結

本次作業我學習到了繼承、多型以及介面的運用,正則表示式的運用和ArrayList的運用,成功掌握了正則表示式中的多種使用方法。但是,我還有許多地方有待進步和改進,比如對於正則表示式的難點題目的突破和ArrayList建立物件List的運用等。其它的各種方法我也會抓緊時間去學習。這三次題目集涉及了很多面向物件的內容,在認真看過老師給出的類圖設計後確實能掌握一些如何來設計一個程式的知識了,同時也能明顯感到面向物件程式設計給程式設計帶來的便利,相比於以前的程式碼,現在寫出的程式碼在可讀性,可拓展性上都有極大的提升,可以說受益匪淺。