20201710賴成慧第二次Blog總結

2022-09-09 02:03:12 字數 4346 閱讀 8084

題目集

四、五、六結束了,題目四考察繼承知識點,題目五考察繼承,題目六考察介面與多型和正規表示式。這三次題目集大部分題相對容易,但是涉及正規表示式的題目比較困難,沒有很好的拿到分數。

題目:參考題目7-2的要求,設計如下幾個類:dateutil、year、month、day,其中年、月、日的取值範圍依然為:year∈[1900,2050] ,month∈[1,12] ,day∈[1,31] , 設計類圖如下:

應用程式共測試三個功能:

求下n天

求前n天

求兩個日期相差的天數

思路:此題只要按照類圖將各個類寫出來,並且完善其中的各個方法的內容就可以。

遇到的困難:

1.在設計求下n天功能/求前n天功能時,因為測試樣例比較大所以比較難以手動計算,驗證錯誤比較困難,而且我擔心幾萬次的迴圈會使得記憶體占用特別大,執行時間也可能會超時。

2.在設計求兩個日期相差的天數功能時,我的第乙個思路是先比較兩個日期大小,然後用迴圈將較大的日期執行日期減一的方法,知道兩個日期相同,記錄迴圈次數。但實際操作中,**執行起來太過於冗雜,記憶體占用和時間都變大變長了。

解決辦法:

1.在多次測試之後實際上並沒有超時,所以依舊採用迴圈方法。

2.多次測試之後,改進無望,改用另一方法

該方法計算快,不會出錯。

題目:參考題目7-3的要求,設計如下幾個類:dateutil、year、month、day,其中年、月、日的取值範圍依然為:year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 設計類圖如下:

應用程式共測試三個功能:

求下n天

求前n天

求兩個日期相差的天數

思路:可以基於題目集四的7-2來做這題,將year,month,day類改成dateutil的子類,按類圖寫**,並完善其中各個方法內容。

遇到的困難:

1.並沒有很多困難,因為功能與7-4是基本一致的,所以只需要注意細節就可以

這兩題都將所有的類都整合在一起,只需要建立乙個物件就可以對年月日進行操作。題目集四中dateutil類day類month類year類從左到右左邊是右邊的父類,題目集五中則將day類month類year類全部改成了dateutil類的子類,變成了「平輩」關係。

從我個人角度來看,題目集五(7-5)的設計,要更優與題目集(7-2)。首先,兩個題目都是在main類中建立乙個dateutil物件,都是題目集四在使用該物件時,十分笨重,因為要一代一代用getter方法訪問下去,訪問到需要的物件,再用方法進行操作。這導致題目集四在設計年份和月份的操作時,乙個小操作都要寫一長串,例如下:

僅僅是輸出乙個日期,**長度已經冗長成這樣了。與之相比較的題目集五,則只需要 物件.getter物件().getter資料() 在寫**時更規律的寫法更不容易出錯,在別人檢視時,更能理清楚其中的邏輯關係。

題目:編寫程式,實現圖形類的繼承,並定義相應類物件並進行測試。

類shape,無屬性,有乙個返回0.0的求圖形面積的公有方法public double getarea();//求圖形面積

類circle,繼承自shape,有乙個私有實型的屬性radius(半徑),重寫父類繼承來的求面積方法,求圓的面積

類rectangle,繼承自shape,有兩個私有實型屬性width和length,重寫父類繼承來的求面積方法,求矩形的面積

類ball,繼承自circle,其屬性從父類繼承,重寫父類求面積方法,求球表面積,此外,定義一求球體積的方法public double getvolume();//求球體積

類box,繼承自rectangle,除從父類繼承的屬性外,再定義乙個屬性height,重寫父類繼承來的求面積方法,求立方體表面積,此外,定義一求立方體體積的方法public double getvolume();//求立方體體積

注意:主方法內,主要實現四個功能(1-4): 從鍵盤輸入1,則定義圓類,從鍵盤輸入圓的半徑後,主要輸出圓的面積; 從鍵盤輸入2,則定義矩形類,從鍵盤輸入矩形的寬和長後,主要輸出矩形的面積; 從鍵盤輸入3,則定義球類,從鍵盤輸入球的半徑後,主要輸出球的表面積和體積; 從鍵盤輸入4,則定義立方體類,從鍵盤輸入立方體的寬、長和高度後,主要輸出立方體的表面積和體積;

假如資料輸入非法(包括圓、矩形、球及立方體物件的屬性不大於0和輸入選擇值非1-4),系統輸出wrong format

思路:先畫出類圖:

建立父類shape和其兩個子類rectangle和circle,再以兩個子類為父類建立兩個子類box和ball

遇到的困難:做題目時還沒學會super的用法,在呼叫父類引數時浪費了很多時間

解決方法:使用super

題目:掌握類的繼承、多型性及其使用方法。具體需求參見作業指導書。

思路:類圖:

使用物件陣列,先輸入各個圖形的數量,再建立相應大的物件陣列。

遇到的困難:報錯exception in thread "main" j**a.lang.nullpointerexception: cannot invoke "sixfive.circle.setradius(double)" because "cir[i]" is null

at sixfive.main.main(main.j**a:26)

解決方法:物件陣列中的每乙個元素,使用前都要用new建立為乙個物件,否則會報上錯

題目:編寫程式,使用介面及類實現多型性,類圖結構如下所示:

其中:思路:按類圖敲**,比較簡單,但是這題用了乙個介面

遇到的困難:還真沒什麼困難,常規題目

解決方法:細心除錯一下就可以

三個題目對應三種做法,第一種是建立圖形類然後按圖形分類建立子類,一直細化下去建立子類。第二種是每種圖形乙個類,互不關聯。第三種是每種圖形乙個類,但需要執行的操作以介面的形式寫進**裡。第一種方法適用於,屬於同一種圖形,但是有多個特徵,比如三角形,有等邊,直角,等角,等腰,直角等邊等特徵,這種情況第一種方法比較適合。第二種方法在對圖形的操作不深入,而圖形種模擬較多樣的情況,例如簡單計算面積的狀況。第三種則適合要分配功能執行功能的情況,例如有多個圖形,一部分圖形要算面積,一部分圖形要計算周長等。

1.正規表示式應該先實驗好功能再貼近**,這需要使用可以在上面實驗自己的正規表示式。

2.正規表示式知識點總結

3.使用心得:正規表示式可以從大量文字中篩選出自己需要的部分,這對於驗證賬號等正確性有很大的方便。正則在j**a中要配合pattern類和mattern類使用,pattern類從來引入規定正規表示式,而mattern類用來對字串操作,在正規表示式中的捕獲分組可以用mattern的group方法提取出來。

這三次作業明顯強調了對於錯誤資料的處理,無論是普通的程式設計題還是使用正規表示式的題目,都要對錯誤的資料進行反應。在敲**的時候,時刻要考慮使用者會如何使用,並且時時刻刻保持注釋的好習慣。7-4對學號的檢驗,題目中要考慮1、7、8方向各個方向有哪些班,不然會造成驗證資料時出錯。

正則題目順序安排不當,我們在第三次第四次都做了正則類題目,但是難度都比較大,然而我們正規表示式基礎題在第六次作業才出,我覺得這有些晚了,基礎訓練確實會做了,但是我們卻失去了幾次聯絡高階題目的機會。

三次作業做完了,這三次作業對應的課程進度的速度比較能接受了,同時我也深刻發覺,繼承、介面、多型這些操作對於j**a來說多麼重要,而且在實際運用上可以幫助我們實現很多功能,並且簡化很多**和操作。現在正值開始學習異常之時,不禁感嘆,當初覺得難的內容總會在一次又一次的查詢資料和實踐中逐漸掌握。在這三周不僅有pta作業,還有實驗農夫過河,在pta中學習到的新知識我都運用在了農夫過河中,也是不負這三次作業的投入了。正規表示式雖然掌握了基本內容,但是在複雜的文字面前我還是不知所措,需要更多的練習。在j**a學習展開的這兩個月,我認為我較好的學到了什麼是物件導向的程式設計了。

第二次周賽B

有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。input 輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0sample input 21 2 3 6sample ou...

個人第二次作業 成湘

專案git位址 git使用者名稱 amelia1313 學號後五位 24110 部落格位址 作業連線 calculator 1 在進行環境配置時,我的電腦始終無法安裝visual studio 2017版,開始我以為是因為我的電腦之前安裝過2015版本,解除安裝時未解除安裝完全造成,所以我使用 vi...

第二次作業

execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...