java第一次到第三次大作業總結

花信风q發表於2024-10-25

目錄:
一、關於物件導向
二、三次大作業設計
** 2.1相關知識**
** 2.2類圖+大作業實現講解+大作業時序圖**
三、三次大作業中踩坑心得
四、修改建議
五、總的心得體悟

一、關於物件導向:
這個學期是我們第一次接觸物件導向的這個概念,在接觸java之前,我們所用到的基本上都是程序導向的。雖然在小規模程式碼上,程序導向比較方便簡單,但程式碼量大起來之後,程序導向就沒有這樣方便了,同時,物件導向在迭代上有很大的優勢,只需要在對應的類中增加功能即可。
三次大作業設計
第一次大作業:第一題相關知識:類的初步實現,私有域的設定,無參構造和有參構造
第二題相關知識:類的初步實現,私有域的設定,無參構造和有參構造
第三題相關知識:類的初步實現,類的陣列的使用,學生資訊的封裝
第四題相關知識:關聯類
第五題相關知識:類的初步實現(包括題目類、試卷類、答卷類的設計與實現)、私有域的設定、方法的定義與呼叫(各類中的方法定義及在程式中的呼叫)、物件的建立與使用(建立題目類、試卷類、答卷類的物件並進行操作)。
第二次大作業:第一題相關知識:類與類之間的排序,類詳細變數的查詢
第二題相關知識:類與物件的實現
第三題:簡單類的實現與程式碼補全
第四題:相關類的程式碼的迭代
第三次大作業:第一題:私有變數與封裝
第二題:正規表示式判斷題目格式
第三題:正規表示式判斷輸入是否合法,類的迭代
二、三次大作業作業設計
2.1類圖
一次大作業:第一題

第二題

第三題

第四題

第五題

首先,在這個題目當中名為設計了一個Timu類,用於儲存詳細題目的資訊(包含題目編號:number,題目內容:neir和題目的標準答案:answer),在這個Timu類中我定義了三個方法,分別是gettimu,getnumber,pd用於獲取帶Timu類中的值,pd是檢驗正確後的輸出,方便後續程式碼的驗證和值的列印校對。
然後我設計一個Exam試卷類,用於存放答卷的資訊,答卷類中有一個timu陣列就是用於存放題目資訊的,該類中存在一個addtimu方法,將接收到的題目存到Timu陣列當中,一個px的方法(因為我接受到的是從0開始的,所以出現題目順序顛倒的情況,會輸出不一樣的結果,所以我加了一個排序,不過這玩意我應該在第一次就把他改成按照題號順序接收的,後面迭代的時候這一處程式碼算是敗筆,花費了大量時間修改,在第三次迭代的時候,這串部分的邏輯一直不過,最後想推到重來的時候已經來不及了),這裡的Exam類和Timu類之間的關係是聚合
同時還有一個Dajuan類,這個類主要用來是處理答卷相關資訊和操作的,在這個類定義類一個Shijuan型別的變數,用來儲存試卷相關的資訊,用來校驗答卷裡面的答案是否正確。並且定義了一個Boolean陣列型別的,用來儲存運算結果,這裡面有一個方法是saveanswer,用來儲存答案,再定義一個checkanswer方法,用來檢驗dajuan中的答案是不是與timu中的答案一致。再定義一個printQuestionAndAnswer和 printResults方法來列印結果
時序圖:

第二次大作業:
第一題
第二題
第三題
第四題
這一次大作業是在上一個大作業的基礎上的一個迭代,因為這個時候還不是很瞭解正規表示式,所以我進行輸入的時候沒有采用正規表示式的形式,而是採用一遍一遍迴圈遍歷,然後用startWith來判斷輸入的型別,如:
Timu類在上次的基礎上並沒有什麼變化,Exam類取消掉了排序方法,因為這一次排序不是按照Timu中的編號來的,所以不在這個類中使用排序,這一次迭代,新增加了一個SJ類,用來儲存代表試卷號的試卷,SJ類中有sjnum,fs[],t[],sum.sjnum是用來記錄有多少張試卷,t[]陣列用來記錄試卷對應試卷的對應的題號,fs[]是用來記錄該題號的分數的,sum用來記錄總分
Timu類中一共兩個方法,一個是addsum(),用來將該試卷中的所有分數相加,最後來判斷是不是滿足100分,另外一個是getfs(int i),這個方法能夠將對應題號的分數返回,用於獲取正確分數的題號。
這一次的Dajuan比起第一次新增了一個方法,是sumfs(),用來將正確題目的分數相加並輸出,如圖所示:

時序圖:

第三次大作業:
第一題
第二題
第三題
這一次迭代在上一次迭代的類的基礎上,我新增了一個學生類,還是從Timu類開始看,在這一次的Timu類當中,因為需要用到刪除功能,所以對Timu類進行了一定的修改,新增加了一個方法changetimu(int num),用來針對刪除時找不到值的timu,如圖所示,

同時,為了符合刪除題目的要求,對SJ類也進行了一定程度上的修改,新增了一個方法,用於將刪除對應的題號的分數歸零。新增了一個changefs()的方法,將fs陣列對應的值賦值為0。
新增學生來,來符合對於#X的輸入,Student類中一共有三個三個變數,一個是儲存學號的String陣列,一個是儲存姓名的String陣列,一個記錄學生數量的int型別,該類中只有一個方法,findxuesheng(String line),用於查詢對應學號的人以及輸出。
Dajuan類中新增刪除題目的方法deletetimu,用來刪除所輸入的題目,如圖所示:

判斷輸入是什麼內容的時候我也是採用上一次相關的方法,採用迴圈獲取,但這也有個問題,這一次的測試點中存在三個不滿足正常輸入的測試點,因此還需要增加一個不滿足正常輸入的判斷。如圖:

同時,這一次的輸入用到了正規表示式,需要使用正規表示式來進行輸入的判斷。如圖:

時序圖:

三次大作業踩坑心得
第一次大作業踩坑心得:因為第一次作業中,我是直接按照輸入的順序接受題目來進行儲存的,所以就會造成最後輸出的題號順序不一樣,因此我增加了一個排序,來對接受到的題號進行排序,排序完後再按照順序輸出,當時本來以為用這個方法能透過後面的迭代的,但在第二次迭代就換了排序的規則,同時,第三次中這個方法暴雷了,最後想重新整理自己的程式碼,但因為時間來不及,最後沒能修改成功。
第二次大作業踩坑心得:這一次大作業給的時間比較豐富,在這一次大作業中,我踩的坑是打亂輸入的順序,原先的的程式碼只能老老實實按照順序輸入才能起到作用,但這一次迭代中,有測試點是會打亂順序的,解決方法:我採用了遍歷加startWith的方式來採用判斷,第一次迴圈將#N:開頭的一個一個儲存到試卷當中,第二遍迴圈將#T的儲存到新定義的SJ類當中,第三遍迴圈處理最終的函式
第三次大作業踩坑心得:這一次大作業踩了蠻多坑的,首先第一坑是輸入要用正規表示式,不然很多輸入不合規的樣例點過不去,其次,這一次的輸入還增加了一個所有輸入都不滿足條件的情況,因此單單使用上一次的輸入不能直接滿足條件,應該再增加一個判斷。同時,在這一次作業中我也遇到了特別難修改的一部分,那就題目中題號對應試卷中對應的不一致,如圖:

當出現這種情況的時候,無法得到有效的答案,因此這個測試點過不去,等想要重新建構這部分程式碼的時候已經來不及了。

改建建議
1.將這種迴圈讀入判斷,從而寫進對應類改進成一遍迴圈,比如這種:

可以將其改成一遍迴圈,迴圈後將對應的存入對應的類,減少迴圈數量
2.將整體輸入寫進新的類中,減少主函式的負擔
如下所示

3.將存入題目的邏輯一開始寫好,避免後續迭代造成程式碼越來越複雜
總結
透過這三次的大作業,我學習到了很多的東西,首先就是java中物件導向的思想,在之前我們寫程式碼基本上是採用程序導向的方法,但透過這幾次的實驗,我基本上掌握瞭如何使用物件導向的方法進行程式設計,學會了物件導向中的設定私有域,學會了物件導向過程中如何透過set,get的方法進行訪問,同時,透過這一次的學習,我還學會了java中如何進行連結串列的編寫,並且這幾次學習,讓我加深了對正規表示式的認識。同時,更加深刻地讓我感受到了java在迭代上面的優勢。並且透過這幾次大作業的學習,我對java中類的封裝,繼承,組合,聚集等關係的認識也更加地深刻了。在這幾次程式碼迭代的過程中,我還學會了在寫java之前應該首先對類進行設計,設計完後繪製是時序圖,不然就很容易像我的程式碼當中,一旦前幾次某個地方出現了問題,那麼在後續迭代的過程當中,不刻意修改的話,程式碼量上去之後再一次進行設計就不是一件簡單的事情了。

相關文章