天天看點

OO前三次作業總結

一、題目集總結

前三次作業都是基本題型,整體難度不大,唯一難度比較大的是第三個題目集的最後一題7-3 一進制多項式求導(讓我寫了四天都還差個測試點真的難受)。

三個題目集知識點不同。第一個題目集主要是基礎文法的考驗,第二個題目集主要是字元串轉換相關的内容,第三個題目集主要是寫類,總體來說是層層遞進的學習。一點都不難,哈哈哈哈哈。難受。

該題目是輸入三條邊,然後判斷該三角形類型并輸出。

(1)如果輸入資料非法,則輸出“Wrong Format”; (2)如果輸入資料合法,但三條邊不能構成三角形,則輸出“Not a triangle”; (3)如果輸入資料合法且能夠成等邊三角形,則輸出“Equilateral triangle”; (3)如果輸入資料合法且能夠成等腰直角三角形,則輸出“Isosceles right-angled triangle”; (5)如果輸入資料合法且能夠成等腰三角形,則輸出“Isosceles triangle”; (6)如果輸入資料合法且能夠成直角三角形,則輸出“Right-angled triangle”; (7)如果輸入資料合法且能夠成一般三角形,則輸出“General triangle”。

這道題比較簡單,就不做過多贅述。

首先判斷非法輸入,如果輸入的三條邊内有任意一條邊超過了題目要求的範圍直接輸出“Wrong Format”,否則繼續執行。

然後判斷是否三條邊可以構成三角形,如果三條邊不能構成三角形直接輸出“Not a triangle”,否則繼續執行。

現在判斷三角形是否可以構成三角形,(1如果可以構成三角形,判斷是否為等腰三角形,(2如果是等腰三角形,(3判斷是否為等邊三角形,如果是等邊三角形輸出“Equilateral triangle”,否則(4判斷是否為等腰直角三角形,如果是等腰直角三角形輸出“Isosceles right-angled triangle”4)3),否則輸出“Isosceles triangle”2),否則判斷是否為直角三角形,如果是直角三角形輸出“Right-angled triangle”1,否則輸出“General triangle”),否則輸出“Not a triangle”。

OO前三次作業總結
OO前三次作業總結

這次代碼寫的很快,但是沒有注意複雜度,雖然自己看得懂但是代碼備援比較嚴重,看SourceMonitor生成的圖,Avg Complexity、Avg Depth、Max Complexity和Avg Stmts/Method這幾項都不合格,希望有所改變。

輸入年月日的值(均為整型數),輸出該日期的下一天。 其中:年份的合法取值範圍為[1820,2020] ,月份合法取值範圍為[1,12] ,日期合法取值範圍為[1,31] 。 注意:不允許使用Java中和日期相關的類和方法。

要求:Main類中必須含有如下方法,簽名如下:

public static void main(String[] args);//主方法

public static boolean isLeapYear(int year) ;//判斷year是否為閏年,傳回boolean類型

public static boolean checkInputValidity(int year,int month,int day);//判斷輸入日期是否合法,傳回布爾值

public static void nextDate(int year,int month,int day) ; //求輸入日期的下一天

這道題也不麻煩,雖然禁用了java日期類,不過影響不大。

首先我們分析一下,加1天可能會發生什麼變化,如果是任何月份的前中天,加1天隻會改變日而不會改變年月。如果是除了12月的任何一個月的最後一天加1,年份不變,月份加一,天數變為該月的第一天。如果是12月的最後一天,年份加一,月日都是第一天。(當然中間關于閏年閏月也是要做相關分析,并不複雜。)

然後,然後就沒什麼了,直接按照什麼的思路寫代碼就可以啦,要切記閏年的判定和閏月的判定要加上。

OO前三次作業總結
OO前三次作業總結

這次代碼比上次仔細很多,看SourceMonitor生成的圖,隻有%Comments這一項不合格,其他都在綠色範圍内。測試代碼的時候閏年閏月這一塊那一塊出了點差錯,具體問題不記得了,其他地方沒什麼問題。

輸入年月日的值(均為整型數),同時輸入一個取值範圍在[-10,10] 之間的整型數n,輸出該日期的前n天(當n > 0時)、該日期的後n天(當n<0時)。

其中年份取值範圍為 [1820,2020] ,月份取值範圍為[1,12] ,日期取值範圍為[1,31] 。

注意:不允許使用Java中任何與日期有關的類或方法。

這道題和上一道題沒什麼差別,也是比較簡單的,具體的判定方法見上一題的解析,關鍵點要注意+8是八天前,-8是八天後,可不要搞反了。

OO前三次作業總結
OO前三次作業總結

這次代碼和上一題差不多,看SourceMonitor生成的圖,還是隻有%Comments這一項不合格,其他都在綠色範圍内。有了上一題的經驗沒什麼問題。

定義一個類Date,包含三個私有屬性年(year)、月(month)、日(day),均為整型數,其中:年份的合法取值範圍為[1900,2000] ,月份合法取值範圍為[1,12] ,日期合法取值範圍為[1,31] 。 注意:不允許使用Java中和日期相關的類和方法,否則按0分處理。

要求:Date類結構如下圖所示:

OO前三次作業總結

當輸入資料非法及輸入日期不存在時,輸出“Date Format is Wrong”;

當輸入日期合法,輸出下一天,格式如下:Next day is:年-月-日;

這一題已經非常熟悉了,關鍵不一樣的就是要按照題目要求定義一個日期類,類是java裡面非常重要的知識點,一定要掌握,由于改題類似已講過兩遍就不再贅述了,直接上圖。

OO前三次作業總結
OO前三次作業總結

在題目給的定義類的基礎上做了些改進,把數組定義到類裡面去了。

輸入格式:

在一行内輸入一個待計算導函數的表達式,以回車符結束。

輸出格式:

如果輸入表達式不符合上述表達式基本規則,則輸出“Wrong Format”。

如果輸入合法,則在一行内正常輸出該表達式的導函數,注意以下幾點: 結果不需要排序,也不需要化簡;

當某一項為“0”時,則該項不需要顯示,但如果整個導函數結果為“0”時,則顯示為“0”;

當輸出結果第一項系數符号為“+”時,不輸出“+”;

當指數符号為“+”時,不輸出“+”;

當指數值為“0”時,則不需要輸出“x^0”,隻需要輸出其系數即可。

這一道題我寫了四天,整整四天!你知道我這四天怎麼過來的嗎?55555

我最後悔的一件事就是沒有用正規表達式去完成這一道題,是的,同學們都去CSDN學習正規表達式來解決輸入問題,我還一臉懵逼的一個個對比輸入表達式,這一塊耗費了我大量的時間與精力,好在是搞了一天解決了輸入。結果噩夢才開始。

我按照自己的判定方法,實作了表達式的求導,後面主要的問題是過一個個測試點,直到題目截止我還有兩個測試點沒過。然後此題最大的天坑點,是求導得到的正數時不需要+的,如4x+3x 應該輸出34而不是3+4。

OO前三次作業總結
OO前三次作業總結

這題改來改去搞的代碼不合格,加了很多if()else()影響比較大。

總結

通過這三次題目集的練習鞏固了我java基礎文法的學習,類的使用也更加透徹,SourceMonitor的生成報表内容以及PowerDesigner的相應類圖也有助于學習。剩下的知識就靠自己慢慢探索了,希望下一次寫出更好的代碼。老師講課認真負責,實踐作業也挺多的,目前沒有什麼要改進的了,老師也一起加油!