題目集4及期中考試 BLOG總結
題目集4及期中考試 BLOG總結
一、 前言:
據上一篇blog已有一個月,在此期間,我一共完成了一篇PTA題目集4及一次期中考試,我將從知識點、題量、難度等方面對兩次題目進行總結。
1、 知識點
題目集4考察了正則表示式的基本應用,利用正則表示式找到符合要求的字元,不同類的方法相互呼叫,以及數學邏輯思維。
期中考試由淺入深地考察了封裝、繼承、多型等Java常見語法。
2、題量
兩次題目的題量都不算很大,均只有三題,但題目集4的第二題包含了多個case,造成了單題題目量較大,需要考慮多重情況,較為複雜。
3、 難度
題目集4第二題整體與四邊形有關,難度較大,需判斷輸入格式是否正確,格式錯誤有多種情況,要靠自己思考錯誤型別及錯誤方法,十分考驗學生考慮問題的周全程度,除此之外,此題還需根據不同情況做出符合要求的程式,十分考察學生的數學思維,除第二題之外,題目集4其餘兩題難度都較小,其餘兩題均只考察了Java基本語法,並未涉及過多的數學知識。期中考試難度並不大,期中考試題目集中的三題為逐步遞進的關係,考察知識點越發詳盡,但只要掌握了其基本使用方法,本題目集中的三個題目難度均不大。
總而言之,除題目集4第二題外,其他題目難度均不大,對數學知識的考查較少,只要掌握了Java基本語法的使用方法,便可完成程式設計。但題目集4的第二題更多地像是在考察數學知識,而非Java程式設計,不過同時它也考察了我們對問題的全面思考。
二、 設計與分析
1、 題目集4 7-1 sdut-String-2 識蛟龍號載人深潛,立科技報國志(II)(正則表示式)
類圖:
分析報告:
解釋:
本題所需結構較為單一,只需利用正則表示式提取出所需要的字串,故如圖所見,本題僅使用了一個類,一個方法體,但註釋過少,因題目較為簡單,故未使用最大圈複雜度較小,最大函式深度較小,平均函式深度較大。
心得:
因本題較為簡單,故無過多程式碼,未定義過多類與方法體,但與此同時,若想成為一個好的程式,萬不可省略註釋,應當在之後的學習中注意這一方面,依據程式內容合理增添必要的註釋。
2、 題目集4 7-2 點線形系列4-凸四邊形的計算
類圖:
分析報告:
解釋:
由圖可見,本題共使用了三個類,多個方法體,但多個類的註釋均過少,Way類甚至未添加註釋,三個類所含方法體或過多或過少,且Main類包含的語句數目過多,最大圈複雜度亦為或過大或過小,未能在合理範圍內。Main類最大函式深度略大,平均函式深度過大,平均圈複雜度過大。Four類最大函式深度較好,但平均函式深度較大,平均圈複雜度也較大。Way類最大函式深度較小,平均函式深度較小,平均圈複雜度較小。
心得:
本題較為複雜,需使用正則表示式判斷輸入是否正確,且題目本身需判斷的情況較多,故程式整體較為複雜,但這更應在合適部位適當增加註釋說明程式碼功能。整體來看,程式碼複雜程度不均,有的類過於簡便,而有的類過於複雜,在之後的學習中應當避免這類情況的發生,程式碼應做到合理分配,依據每個方法的具體功能以及可使用性,合理分配其所在的類。
3、 題目集4 7-3 設計一個銀行業務類
類圖:
分析報告:
解釋:
由圖可見,本題使用了兩個類,多個方法體,且在兩個類中註釋均過少。在Main類中包含的語句數目過多,但最大圈複雜度過小,最大函式深度過小,平均圈複雜度過大,僅有平均函式深度較為合適。因本題所要實現的功能較多,故將主體程式碼放入Main類中,與銀行功能有關的程式碼均放在BankBusiness類中,BankBusiness類僅有平均每一方法所含語句數較少,其餘效能都較為合適,總體而言結構較為合理。
心得:
兩個類中仍舊註釋很少,此項一定要引起注意,不可因為題目較為簡單而省略註釋,除此之外BankBusiness類結構較為合理,可供之後書寫程式時作為一項參考。相比較而言,Main類中的問題較多,且基本都為我時常出現的問題,在今後的學習中我應當多加註意。
4、 期中考試 7-3 點線面問題再重構(容器類)
類圖:
分析報告:
解釋:
本題共使用了六個類,其中Main類為其主類,Element類為多個類的父類。此程式中Main類結構最為複雜,多項數值都較為偏高,除此之外,大多類中的方法體都較多,但平均複雜度都較低,由此可見,大多方法結構都較為簡單,並非十分合理。而後便是所有類中的註釋都較少。
心得:
可將Main類中的一部分程式碼移至其他類,由此降低Main類的複雜程度,應做到程式碼的合理分佈。本程式仍未添加註釋,不可因題目已給出大多結構而省略程式碼的書寫,仍應在合適位置適當添加註釋,增加程式碼的可讀性。
三、 踩坑心得
1、 題目集4 7-1 sdut-String-2 識蛟龍號載人深潛,立科技報國志(II)(正則表示式)
本題主要考察的知識點為正則表示式,需從輸入的一長串字串中提取到符合條件的數字,而後將所有數字相加得到最終結果。在做本題前,我尚未完全掌握正則表示式,導致多處正則表示式使用不規範。題目要求為計算出每一行數字之和,但我在最開始的時候因無法合理使用正則表示式而不知如何才能按照題目要求寫出相應的程式碼。
除此之外,我還不清楚如何才能在讀到“end”時結束輸入,而後我想到了利用迴圈解決該問題,故如上述圖片所示,我最終使用了while語句,當檢測到“end”時便跳出迴圈,由此解決了我原先的問題。
2、 題目集4 7-2 點線形系列4-凸四邊形的計算
此題中我的問題較多,該題更多地考驗的是我們的數學知識,以及數學的邏輯思維能力。在判斷是否為四邊形時,我是用的是如下方法,我尚未發現有何問題,但有一個相關的測試點無法通過。
除此之外,我尚未完全掌握一個簡便方法判斷一個點是否在三角形內部,我所思考到的方法都過於複雜,不利於問題的解決,且不利於我自己在後期檢查程式碼所包含的問題,導致我所寫的程式碼只能判斷部分四邊形是凹四邊形還是凸四邊形,而我並不知道問題出在哪裡。
在該題中,我所想到的判斷點所組成的圖案的形狀都為較為規整的點,未考慮到多種特殊情況,考慮不周全導致部分測試點無法通過。
因本題多處與題目集3較為相似,故多處思路同題目集3相同,這也就導致了些許題目集3所出現的邏輯上的問題,在本題中也有所體現,且尚未找到合適的解決方法。
3、 題目集4 7-3 設計一個銀行業務類
本題較為簡單,但在書寫此題時,我未仔細看題,花費大量時間思考如何將每個使用者的個人資訊儲存到一起,導致花費大量時間,而後我才注意到本題只涉及到一名使用者,且其資訊可自主儲存在相應的類中,只需通過將使用者資訊利用構造器傳入到BankBusiness類中。
本題中,我原先忽視了double型別的計算存在誤差,而導致在計算賬戶餘額時出現了一定的偏差,而後我將double型別的資料均改為了float型別。
4、 期中考試 7-3 點線面問題再重構(容器類)
本題我未完全熟悉ArrayList<Element>型別的使用方法,忘記了其自身包含remove方法,並不用自己寫一個,導致在此方向上耗時較多。本題整體而言,較為簡單,因題目中大多都已寫明每個類的屬性和方法,已給出相應的類圖,故未出現過多問題。
四、 改進建議
1、 題目集4 7-1 sdut-String-2 識蛟龍號載人深潛,立科技報國志(II)(正則表示式)
從SourceMonitor以及PowerDesigner軟體測評結果可以看到,本程式結構較為合理,但註釋過少,且在所有問題中,最易改善的問題亦為註釋過少,應當在合適的位置適當標註些許註釋,有利於自己對自身程式碼的理解與反思,在後期修改程式碼時也較為便捷,除此之外,也可降低他人閱讀程式碼的難度。除此之外,我應當更加熟練掌握正則表示式的使用方法,本題只考察了其基本用法,並未深入考察,故尚未將我更多的問題暴露出來。
2、 題目集4 7-2 點線形系列4-凸四邊形的計算
從SourceMonitor以及PowerDesigner軟體測評結果可以看到該函式較為複雜,雖已使用了正則表示式判斷輸入格式是否正確,但同時也使用了較多的for和if語句判斷輸入點個數是否正確,此處亦可使用正則表示式降低程式碼整體的複雜程度。判斷點是否在三角形內部或許可以使用經過該點的直線與三角形有幾個交點來判斷該點是否在其內部。
3、 題目集4 7-3 設計一個銀行業務類
將double型別轉換成float型別來降低計算誤差並不是一個好方法,我可以尋找一種方法,不改變資料型別,而達到降低誤差的目的。
4、 期中考試 7-3 點線面問題再重構(容器類)
應當更加深入地學習ArrayList,瞭解其主要使用方法,以及其基本語法,將尚未掌握的知識點弄懂,並學會簡便地使用它,爭取在下次使用時能做到得心應手。其次一個問題便為註釋過少,在之後的學習中我應當在程式合適位置適當添加註釋,以增加程式的可讀性。
五、 總結
這兩次的題目集不僅考察了我們的數學思維,有利於我們總多方面認真思考問題,還由淺入深地考察了繼承與多型的知識。繼承與多型作為Java中最基本也是較為難懂的部分,十分值得我們進行深入學習。通過這兩次的題目,我知道了自己知識中的盲點在何處,明確了今後的學習方向,受益匪淺。