題目集7~8總結性blog

陈敏慧發表於2024-06-29
  • 在我看來,題目集7~8知識點在於類的使用,方法的呼叫,透過不同類的ArrayList的使用將所有元件資訊錄入,透過連線方式將其變成一條電路,從而進行計算和使用,題量不大,只有一道題,在精不在多,難度適中,可以接受並且能夠程式設計寫出,完成功能的實現。
  1. 題目集七:
    題目集7在題目集6的基礎上增加了兩個新的元件:互斥開關和受控窗簾;
  • 互斥開關,顧名思義,就是相互排斥的,所以其是擁有兩個開關引腳,一個接通,另一個就斷開。例如:左邊是彙總引腳,編號為1;右邊兩個是分支引腳,右上的輸出引腳為2,右下輸出引腳為3。1、2、3引腳均可以是輸入引腳,當1為輸入引腳時,2、3引腳為輸出引腳;1為輸出引腳時,2、3引腳為輸入引腳。互斥開關只有兩種狀態:開關接往上面的2號引腳、接往下面的3號引腳。開關每次只能接通其中一個分支引腳,而另一個分支引腳處於斷開狀態。互斥開關的預設狀態為1、2引腳接通,1、3引腳斷開。互斥開關可以反過來接入電路,即彙總引腳接往接地端,兩個分支引腳接往電源端。這樣便清楚了互斥開關的作用,然後將其功能實現。因為其本質是開關,而且還是兩個開關,由此,藉由此,我首先測試了使用一個互斥開關控制兩條路,但是結果卻不盡如人意。因此,我轉而使用了兩個開關代替互斥開關,這樣就能解決無法控制兩端通路的問題。兩個開關,透過名字中的2或3判斷是哪一個,再透過狀態closed和turned on轉換開關狀態,實現互斥,這樣就完成了互斥開關的設計。

  • 其次,受控窗簾,這不僅僅是單個元件電壓電流可以判斷的,關係到了其他的電路元件,比如:日光燈和白熾燈,受到其所發出的光照強度lum所影響,受控窗簾開啟程度不同,因此,設計的時候需要在總電路上設定一個getLux()方法去獲得電路總體光照強度,再透過受控窗簾自身類中設定一個getOpen()方法去獲得其開啟程度(開啟程度根據題意反饋),但是要記得電壓問題,因為受控窗簾對電壓有特定要求當電壓低於50V,窗簾不工作,預設為全開狀態,如果電路中沒有燈或者燈全部關閉,光照強度為0,窗簾處於全開狀態,由此還要再getOpen()方法中獲得電壓咋再判斷;寫出其他電壓,電流等屬性,就完成了受控窗簾類的編寫。

  • 這次作業還增加了一個電路要求:本次迭代考慮多個並聯電路串聯在一起的情況。
    本題考慮一條串聯電路中包含其他串聯電路的情況。例如:
    即#T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]
    本例中T1\T2兩條串聯電路T3的一個部分,本題考慮這種型別的輸入。
    對此,我的判斷是在原本串聯電路T中設定ArrayList。這樣就能在串聯電路中檢測到另一個串聯電路並且將其連線,獲得資料輸入輸出;而對於多個並聯電路串在一起,就可以在電路類T中增加ArrayList。這樣就能在串聯電路中檢測到另一個並聯電路並且將其判斷進串聯電路T中,獲得並聯電路的合取,達到實現功能的目的。由於串聯電路中既包含了串聯電路又包含了並聯電路,在被包含的串並聯電路內要實現Calculate()計算方法,實現總體計算。

  • 類分析

  • 題目集7的類如圖:

  1. 題目集八:

題目集8增加了多個功能:

  1. 增加管腳電壓的顯示:在輸出每個電器的狀態資訊後,再依次輸出該電器每個管腳的電壓
  2. 電流限制:電器在工作時,過大的電流會引起電器過熱,從而燒壞電路。每個元器件都有最大電流的設定,當實時電流超過最大電流時,在該電器輸出資訊的最後加入提示“exceeding current limit error”。
  3. 短路檢測:如果電路出現無窮大的電流造成短路,所有元器件資訊不輸出,僅輸出提示“short circuit error”。
  4. 並聯電路中包含並聯:考慮並聯電路中包含並聯電路的情況,即構成並聯電路的串聯電路可以包含別的並聯電路。例如如下輸入的電路,並聯電路M2的其中一條串聯電路T4中包含了另一條並聯電路M1:
    即#T1:[IN D2-1] [D2-2 H1-2] [H1-1 OUT]
    即#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
    即#M1:[T1 T2]
    即#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
    即#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
    即#M2:[T4 T5]
  5. 增加二極體元件,其電路特性為:正向導通,反向截止;當正向流過時,二極體導通”conduction”,電阻為0;電流反向流動時,二極體截止”cutoff”,電阻無窮大,相當於開關開啟。但是注意:二極體如果兩端電壓相等,沒有電流流過,分以下兩種情況輸出:如果兩端電壓為0,二極體的導通/截止狀態由接入方向決定,1號引腳靠近電源則狀態為導通,反之為截止;如果兩端電壓不為0,二極體導通。
  • 首先,增加一個新的元件,二極體本質上還是一個開關,由於其電流不同的流通方向導致其開關的closed和turned on不同,可以透過其名字字尾加上“1”“2”實現state判斷二極體開關狀態,再進行元件資訊的輸出即可。

  • 對於電流限制即可從各個元件類裡增加maxI說明最大電流,透過getI()方法實現該元件電流的獲取,再在輸出中判斷是否超過最大電流,根據題目相應資訊輸出該元件相應的電壓和是否電流過大。

  • 短路檢測本質上是檢測該段電路通路時電阻是否為0,當且僅當state=1並且R=0時該段電路的電流無限大,造成電路短路。

  • 管腳電壓輸出不成問題,但是注意:當元件輸入引腳為2輸出引腳為1時輸出資訊要做出相應改變,如此以獲得正確的管腳電壓輸出。

  • 最後來到並聯電路包含並聯中來,這其實也只是串聯電路包含並聯電路,只不過是進行了兩次然後實現並聯包含並聯,其實依照上一次的串聯包含並聯即可解決。

  • 類說明

  • 題目集8類圖說明如圖:

  1. 題目集七:
  • 題目集7中增加的互斥開關,本來是想著設計成兩個開關同時控制兩條電路庚飯方便,但事實證明在後面的迭代中使用一個開關更方便,這樣在輸出管腳電壓時就不許需要反覆判斷是否為同一個互斥開關,1,2,3引腳電壓該怎麼透過不同的名字去實現對應的電壓輸出。其次,因為互斥開關具有三個引腳,每個引腳的電壓可能都不同,這樣就需要去判斷是否有電壓流過等等問題,實現此類功能的難度就更大了。

  • 受控窗簾一開始的開啟度完全錯誤,Debug之後發現是要進行一次總的電路結算。對於每一條串聯電路T都可以實現光照強度的獲得,但是最後還要進行總的計算,不然資料會稍有偏差。

  1. 題目集八:
  • 題目集8因為所加功能比較多,所以踩坑也是很容易,每條電路資訊錄入後都需要計算然後更新再計算,這樣才能獲得準確資訊。比如:並聯裡面包含並聯電路,因為它是由串聯電路包含並聯電路的多次迭代從而實現並聯包含並聯,如果不進行每一條電路的更新,計算方面的錯誤就會非常多。

  • 輸出管腳電壓時容易輸入輸出反著輸。由於一開始給的屬性中時c1,c2.如此表示輸入輸出電壓後,便無需判斷輸入輸出引腳問題,直接輸出就可。但此時需要按順序輸出引腳1和引腳2的電壓,就需要考慮前後問題,增加了繁雜的判斷才可輸出。

  • 因為所有電路我都設定了state,如果state=0,電路是斷開的,初始電壓就為0,但是這跟題目不符合,題目是要只有斷開時,輸入電壓還是電路一開始的初始電壓,但是輸出電壓為0;因此,又要修改Calculate()方法實現對應的功能。

  1. 題目集七:
  • 將互斥開關改成單個開關進行兩條電路的連線,而不是利用兩個開關控制兩條電路。
  • 總電路進行更新再計算以獲得受控窗簾開啟度的準確獲取。
  1. 題目集八:
  • 所有元件進行名字更改,以便進行引腳電壓輸出。
  • 並聯電路包含並聯時,電路進行更新以獲得準確資料。
  • Calculate()方法中加入限制,只有到控制類元件時,state=0或者轉換出來的電壓為0電壓才開始變化,並且設定Volt變數不斷去改變電壓,獲得實時電壓,進行電壓有效傳輸。
  • 題目集7~8知識點覆蓋仍然和之前相同,在類的使用上已經大致掌握了,在繼承類,抽象類等的使用也更加得心應手。題量在分析中顯得功能增加的有些多,但其實總體來說還OK。總之,學到了寫程式設計之前先列大綱,講需求,配硬體分蓬蒿每個類及其方法,最後進行完善寫出完整的帶有題目所需功能的程式設計。
  • 本門課程採用課前預習,課上老師講解題目將會使用到的方法,課後佈置習題以提高對學生對知識的掌握度,最後合理安排時間讓我們寫總結性blog,使我們對知識點的印象更加深刻,我覺得這樣的方法非常好。不僅僅是學到知識,還學會了如何使用以及熟練掌握並且運用,這是非常好的。所以,並沒有什麼建議可以提出。