PTA第7~8次題目集的總結

Csck發表於2024-06-30

目錄

一 . 前言

二 . 設計與分析

三 . 採坑心得

四 . 改進建議

五 . 總結

=================================================================================================================================

前言

題目總結

第7次題目集

題目

7-1 家居強電電路模擬程式-3

請根據如下要去設計一個智慧家居強電電路模擬系統。模擬的控制裝置:開關、分檔調速器、連續調速器、互斥開關。受控裝置:燈、風扇、受控窗簾。

並對組成的線路進行資訊處理。

知識點:

  1. 將實際電路的工作方式抽象化。

    以實際電路的執行方式對每一個物件進行操作,如何將其抽象化是十分重要的。

  2. 繼承與多型。

    次用繼承與多型的方法來處理不同型別的資訊,使其中的資訊有不同的處理方式。

  3. 設計判斷條件的能力。

    使用了互斥開關,如何設計其開關狀態、如何設計其變化方式以及判斷操作的設計為此次題目集的難點。

第8次題目集

題目

7-1 家居強電電路模擬程式-4

請根據如下要去設計一個智慧家居強電電路模擬系統。模擬的控制裝置:開關、分檔調速器、連續調速器、互斥開關。受控裝置:燈、風扇、受控窗簾、

二極體。並對組成的線路進行資訊處理。

知識點:

  1. 繼承與多型的使用。

    多樣的用電器,不同型別的線路,各有特色的控制器,都有內在聯絡,又有不同之處。採用繼承與多型的方式來處理有關電器,使得操作流暢,

    設計合理。

  2. 類與類之間的關係處理。

    此次用電器與線路有著密切關係,並且多種用電器之間型別相似,對應的用電器有著不同的處理方式,需要進行合理的類與類之間關係的設計。

  3. 對多樣性的條件進行合理的處理。

    此次程式要求將對應用電器的引腳資訊以及是否超過最大電流進行判斷輸出,如何處理好有關資訊是十分此次作業重難點。

=================================================================================================================================

設計與分析

第7次題目集

類設計

Main類

構建處理類(將輸入的句子轉化為電器,電路,操作)

電器類(包含用電器的基本資訊,用於儲存一些基本資訊)

線路類(繼承於電器類,包含用電器連結串列與用電器的基本資訊,還有一些對應的處理方法)

受控窗簾類(繼承自用電器類,按照電壓大小以及亮度進行對應操作)

燈光類(燈光繼承自用電器,增加亮度資訊)

日光燈類(繼承自燈光類,包括日光燈類的處理方式)

白熾燈類(繼承自燈光類,包括白熾燈類的處理方式)

風扇類(包含用電器的方法與屬性,額外還有轉速作為屬性,以及對應的處理)

開關類(繼承自用電器類,控制電路通路與否)

互斥開關類(繼承自用電器類,包含對應互斥開關的屬性以及處理方式)

調節器類(控制進入後傳出的電壓大小)

分檔調節器類(繼承自調節器類,有著分檔調節的檔位處理方式)

連續調節器類(繼承自調節器類,有著 連續調節的檔位處理方式)

類圖:

處理思路

先將輸入的線路構建與用電器操作分為不同的兩種操作存入對應的字串陣列或字串中,直至輸入end結束。接著處理輸入的線路構建有關的資料後,按照輸入的資訊

構建對應的電路,使用正規表示式將字串分割成為每個用電器,再按分割後的字串進行判斷設計,然後按照輸入線路的不同按照不同的方式構建線路,構建完後將其加

入線路的動態陣列之中,然後按照輸入的操作對線路進行的控制元件的操作。做完後,由前到後的順序對每一條線路進行是否通路的判斷,判斷後計算每一個線路對應的總

電阻,將構建的線路由後到前的順序透過輸入的電壓的連通,計算對應的電流,並按照電壓=電流✖️電阻的方式獲取對應的電壓,並將對應的電壓賦值到對應的用電器中,

之後將用電器按對應電壓進行對應操作的結果賦值操作。最後按開關、分檔調速器、連續調速器、白熾燈、日光燈、吊扇,落地扇,互斥開關,受控窗簾的順序排序後,依

次輸出有關資訊。

第8次題目集

類設計

Main類

構建處理類(將輸入的句子轉化為電器,電路,操作)

電器類(包含用電器的基本資訊,用於儲存一些基本資訊)

線路類(繼承於電器類,包含用電器連結串列與用電器的基本資訊,還有一些對應的處理方法)

受控窗簾類(繼承自用電器類,按照電壓大小以及亮度進行對應操作)

燈光類(燈光繼承自用電器,增加亮度資訊)

日光燈類(繼承自燈光類,包括日光燈類的處理方式)

白熾燈類(繼承自燈光類,包括白熾燈類的處理方式)

風扇類(包含用電器的方法與屬性,額外還有轉速作為屬性,以及對應的處理)

二極體(繼承自用電器類,接入方式與是否能夠通路有很大的關聯)

開關類(繼承自用電器類,控制電路通路與否)

互斥開關類(繼承自用電器類,包含對應互斥開關的屬性以及處理方式)

調節器類(控制進入後傳出的電壓大小)

分檔調節器類(繼承自調節器類,有著分檔調節的檔位處理方式)

連續調節器類(繼承自調節器類,有著 連續調節的檔位處理方式

類圖

處理思路

先將輸入的線路構建與用電器操作分為不同的兩種操作存入對應的字串陣列或字串中,直至輸入end結束。接著處理輸入的線路構建有關的資料後,按照輸入的資訊

構建對應的電路,使用正規表示式將字串分割成為每個用電器,再按分割後的字串進行判斷設計,然後按照輸入線路的不同按照不同的方式構建線路,構建完後將其

加入線路的動態陣列之中,然後按照輸入的操作對線路進行的控制元件的操作。做完後,由前到後的順序對每一條線路進行是否通路的判斷,判斷後計算每一個線路對應

的總電阻,將構建的線路由後到前的順序透過輸入的電壓的連通,計算對應的電流,並按照電壓=電流✖️電阻的方式獲取對應的電壓,並將對應的電壓賦值到對應的用電

器中,之後將用電器按對應電壓進行對應操作的結果賦值操作。對比上次設計,此次增加了一個引腳賦值的操作,進行完對每一個用電器的輸入引腳和輸出引腳賦值後。

最後按開關、分檔調速器、連續調速器、白熾燈、日光燈、吊扇、落地扇、互斥開關、受控窗簾、二極體的順序排序後,依次生成有關資訊的字串並輸出。

=================================================================================================================================

採坑心得

第7次題目集

1. 互斥開關設計不完全,遺漏了互斥開關接在並聯電路尾部的情況。

解決方法:

增加了對應情況的判斷以及對應的處理方式。

2. compareTo方法中遺漏了增加的互斥開關和受控窗簾,導致錯誤。

解決方法:

增加了對應的字母來保障執行正確。

第8次題目集

1. 對應的用電器電壓輸入引腳與輸出引腳的賦值錯誤。

解決方法:

重新設計了引腳的電壓的資訊輸入方式。

2. 輸出的結果不符合要求。

採用了String.format("%.0f",Math.floor(資料))的方式來避免了四捨五入的結果產生。使得輸出的結果符合要求。

3. 輸出引腳資訊順序不是按照從小到大的順序。

解決方法:

增加了將輸入的引腳資訊先排序的步驟,在輸出前將引腳的資訊進行了處理。

改進建議

第7次題目集

操作類中的內容太繁雜,複雜度太高,可以將功能更好的分配下去,降低某一部分的時間複雜度,使類更加合理,更能做好各負其責的實現。

第8次題目集

複雜度爆炸💥,很有必要進行更合理的設計。繼承的操作未能做好,沒能將類進行更好的分配。引腳的操做出沒用很好的設計,有情況會發生錯誤結果,並且操作過於複雜時間

複雜度太高,不利於進行修改與進行迭代。應該將有關內容合理分配下去,並且靈活使用繼承與多型,以更好的設計程式碼,實現降低時間複雜度,構建出更好的結構。

=================================================================================================================================

總結

因為第六次題目集設計的類沒有進行修改,在寫第7次的程式碼時只是在第六次的基礎上進行了對應情況的處理方式,加劇了複雜度太高的情況,但第七次的難度主要在於互斥開

關的設計,其餘不算太難。第8次題目集增加了引腳的處理,因為我原本的程式碼刪掉了有關引腳的資訊,本次又新增回去,導致很多操作都不能實現應有的功能,並且這次對於

資訊的輸出中含有大量的資料,所以出現了很多的資料問題,第八次題目集中對於引腳的處理方式是本次作業的痛點。

在這幾次題目集中學習到的主要知識有以下幾個知識:

1. 繼承與多型的合理使用。

多型:同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以透過指向基類的指標,來呼叫實現派生類中的方法。

繼承:繼承是物件導向最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。

多型的作用:把不同的子類物件都當作父類來看,可以遮蔽不同子類物件之間的差異,寫出通用的程式碼,做出通用的程式設計,以適應需求的不斷變化。

繼承的作用:提高了程式碼的複用性(多個類相同的成員可以放到同一個類裡),提高了程式碼的維護性(如果放大的程式碼需要修改,修改一處就行)。

2. 介面的使用。

介面的定義:泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不影響外界其他實體與其互動的方式。

(介面可以理解為一種特殊的類,裡面全部是由全域性常量和公共的抽象方法所組成。)

介面的好處:類與介面的關係,實現關係,而且是多實現,一個類可以實現多個介面,類與類之間是繼承關係,java中的繼承是單一繼承,一個類只能有一個父類,打破了繼承

的侷限性。降低了程式的耦合性(可以實現模組化開發,定義好規則,每個人實現自己的模組,提高了開發的效率)。

以及如何使用簡單的介面解決有關問題。

3. 提前設計的必要性。

在進行程式碼化之前,需要先進行有關的設計,這樣既可以避免程式碼化時出現無從下手的現象產生,還能提高書寫程式碼的效率。並且當先設計好時,我們能更能遊刃有餘的處理好

題目有關的要求。

4. 減少複雜度的重要性。

寫完了的程式碼要及時進行降低複雜度,如果複雜度太高,將無法進行好下一次的迭代。

5. 資料規範的重要性。

因為資料操作時有時會因為不合規範導致錯誤以及存在輸出的資料有各自不同的要求的情況,但是選擇方式不合理將無法很好的進行操作,所以要重視對於資料的規範。