PTA7-8總結

肖栋平發表於2024-06-30

前言

知識點

PTA7:

這是一個類比電路系統的Java程式,其中定義了多種電路元件(如開關、調速器、燈泡、風扇等),並模擬了它們的互動和行為。下面是對程式碼的詳細分析:

類和繼承
Circuit 類:
這是一個抽象基類,定義了所有電路元件共有的方法,如設定輸入電壓、顯示狀態等。

Switch 類:
繼承自 Circuit,代表一個開關。
包含狀態(開/關)、名稱和輸入/輸出電壓。
change() 方法用於切換開關狀態。

Binning_governor 類:
繼承自 Circuit,代表一個分檔調速器。
包含檔位、名稱和輸入/輸出電壓。
setGears1() 和 setGears2() 方法用於調整檔位。

Continuous_governor 類:
繼承自 Circuit,代表一個連續調速器。
包含調速檔位、名稱和輸入/輸出電壓。
setGears() 方法用於設定調速檔位。

Incandescent_lamp 類:
繼承自 Circuit,代表一個白熾燈。
包含亮度、名稱和輸入電壓。
setInput_voltage() 方法用於設定輸入電壓並計算亮度。

Fluorescent_lamp 類:
繼承自 Circuit,代表一個日光燈。
包含亮度、名稱和輸入電壓。
setInput_voltage() 方法用於設定輸入電壓並計算亮度。

ceiling_fan 類:
繼承自 Circuit,代表一個吊扇。
包含轉速、名稱和輸入電壓。
setInput_voltage() 方法用於設定輸入電壓並計算轉速。

daget 類:
作為總用電器類,所有的線路內的都繼承它
包括
inInput_voltage() 傳遞電流

主程式邏輯
輸入處理:

程式透過 Scanner 讀取使用者輸入,根據輸入的不同字首(如 [K、[F、[L 等)建立不同的電路元件,並將其儲存在 TreeMap 中。
處理命令如 #K、#F、#L 等,用於改變開關狀態、調整調速器檔位或設定連續調速器的檔位。
電路模擬:

根據輸入電壓和電路元件的狀態,計算並更新每個元件的輸出電壓。
如果電路中存在關閉的開關,則整個電路斷電。
如果電路連線正確(即所有元件都正確連線且沒有斷路),則電路通電。
輸出:

根據電路狀態,輸出每個元件的狀態資訊。

PTA8:

類圖如下:

這是一個類比電路系統的Java程式,其中定義了多種電路元件(如開關、調速器、燈泡、風扇等),並模擬了它們的互動和行為。下面是對程式碼的詳細分析:

類和繼承
Circuit 類:
這是一個抽象基類,定義了所有電路元件共有的方法,如獲取電阻、設定電壓、顯示狀態等。

Switch 類:
繼承自 Circuit,代表一個開關。
包含狀態(開/關)、名稱和輸入/輸出電壓。
change() 方法用於切換開關狀態。

Binning_governor 類:
繼承自 Circuit,代表一個分檔調速器。
包含檔位、名稱和輸入/輸出電壓。
setGears1() 和 setGears2() 方法用於調整檔位。

Continuous_governor 類:
繼承自 Circuit,代表一個連續調速器。
包含調速檔位、名稱和輸入/輸出電壓。
setGears() 方法用於設定調速檔位。

Incandescent_lamp 類:
繼承自 Circuit,代表一個白熾燈。
包含亮度、名稱和輸入電壓。
setInput_voltage() 方法用於設定輸入電壓並計算亮度。

Fluorescent_lamp 類:
繼承自 Circuit,代表一個日光燈。
包含亮度、名稱和輸入電壓。
setInput_voltage() 方法用於設定輸入電壓並計算亮度。

Ceiling_fan 類 和 Floor_fan 類:
繼承自 Circuit,代表吊扇和落地扇。
包含轉速、名稱和輸入電壓。
setInput_voltage() 方法用於設定輸入電壓並計算轉速。
電路元件

Series_circuits 類:
代表一個串聯電路。
包含一個 LinkedHashMap,用於儲存串聯的電路元件。
getstate() 方法用於判斷電路的狀態(短路、通路或斷路)。

Parallel_circuits 類:
代表一個並聯電路。
包含一個 LinkedHashMap,用於儲存並聯的串聯電路。
getresistance() 方法用於計算並聯電路的總電阻。

主程式邏輯
輸入處理:

程式透過 Scanner 讀取使用者輸入,根據輸入的不同字首(如 #T、#K、#F 等)建立不同的電路元件,並將其儲存在 Parallel_circuits 中。
處理命令如 #K,用於改變開關狀態。
電路模擬:

根據電路元件的狀態和輸入電壓,計算並更新每個元件的輸出電壓。
使用 Series_circuits 和 Parallel_circuits 來模擬串聯和並聯電路的行為。
輸出:

根據電路狀態,輸出每個元件的狀態資訊。

踩坑心得:

1.treemap<>的自然排序只會對key值是單一資料型別生效

2.java不支援多繼承,只承認有一個父類,如果要實現相應功能,可以實現介面

改進建議:

PTA7:

程式碼結構:
將每個裝置類放在單獨的檔案中,這樣可以提高程式碼的可維護性和可讀性。
為每個裝置類建立一個單獨的包,例如com.example.circuit.switch,這樣可以更好地組織程式碼。

註釋和文件:
為每個類和方法新增詳細的註釋,說明其功能和用法。
使用Javadoc為公共類和方法生成文件。

異常處理:
在嘗試獲取電路物件時,如果物件不存在,應該丟擲異常或者返回一個錯誤程式碼,而不是直接使用null檢查。

輸入驗證:
在處理輸入時,應該更嚴格地驗證輸入資料的格式和範圍,以防止無效輸入。

程式碼重複:
程式碼中有一些重複的程式碼,例如設定輸入電壓和顯示電路狀態的方法。可以考慮將這些重複的程式碼提取到單獨的方法中。

資料結構選擇:
使用TreeMap來保持電路名稱的有序排列是一個好的選擇。但是,應該考慮是否真的需要保持這種順序,或者是否可以使用其他資料結構來提高效能。

錯誤處理:
當電路狀態發生變化時,應該有一個清晰的錯誤處理機制來處理無效的狀態變化,例如嘗試將調速器的檔位設定為負數。

效能最佳化:
在處理電路狀態時,程式碼中有多個迴圈和條件判斷。可以考慮使用更高效的資料結構和演算法來最佳化效能。

功能測試:
編寫一些測試用例來測試不同的電路配置和輸入,以確保程式碼的健壯性和正確性。

PTA8:

程式碼結構:
將每個裝置類放在單獨的檔案中,這樣可以提高程式碼的可維護性和可讀性。
為每個裝置類建立一個單獨的包,例如com.example.circuit.switch,這樣可以更好地組織程式碼。

註釋和文件:
為每個類和方法新增詳細的註釋,說明其功能和用法。
使用Javadoc為公共類和方法生成文件。

異常處理:
在嘗試獲取電路物件時,如果物件不存在,應該丟擲異常或者返回一個錯誤程式碼,而不是直接使用null檢查。

輸入驗證:
在處理輸入時,應該更嚴格地驗證輸入資料的格式和範圍,以防止無效輸入。

程式碼重複:
程式碼中有一些重複的程式碼,例如設定輸入電壓和顯示電路狀態的方法。可以考慮將這些重複的程式碼提取到單獨的方法中。

資料結構選擇:
使用TreeMap來保持電路名稱的有序排列是一個好的選擇。但是,您應該考慮是否真的需要保持這種順序,或者是否可以使用其他資料結構來提高效能。

錯誤處理:
當電路狀態發生變化時,應該有一個清晰的錯誤處理機制來處理無效的狀態變化,例如嘗試將調速器的檔位設定為負數。

效能最佳化:
在處理電路狀態時,您的程式碼中有多個迴圈和條件判斷。可以考慮使用更高效的資料結構和演算法來最佳化效能。

功能測試:
編寫一些測試用例來測試不同的電路配置和輸入,以確保程式碼的健壯性和正確性。

介面和抽象類:
考慮使用介面和抽象類來定義電路的通用行為,這樣可以提高程式碼的靈活性和可擴充套件性。

單元測試:
為每個類編寫單元測試,以確保其功能正確無誤。

總結:

透過這幾次的作業,我學到了如下幾點:
1.瞭解瞭如何使用Java程式語言實現一個簡單的電路模擬系統。
2.學習了物件導向程式設計的基本概念,包括類、物件、繼承和多型等。
3.學習瞭如何使用Java標準庫中的集合類和泛型來實現複雜的資料結構和演算法。
4.學習瞭如何使用註釋和文件來記錄程式碼的功能和用法,以及如何使用Javadoc生成文件。
5.學習瞭如何使用單元測試來確保程式碼的正確性和健壯性。
6.學習瞭如何使用程式碼規範和設計模式來提高程式碼的可維護性和可讀性。
7.學習瞭如何使用物件導向的設計原則,如單一職責原則、開閉原則和依賴反轉原則等。
8.學習瞭如何使用類和介面來定義電路的通用行為,以提高程式碼的靈活性和可擴充套件性。

對課堂和老師的建議:

1.希望能更深入探究物件導向的內涵,以及更多的實際操作。