題目集4~6的總結性Blog

爱写代码的小智發表於2024-06-09

第二次Blog是對第二類大作業的總結
前言:
前三次題目集的題量不會很大,提出的引腳我是第一次正式這種問題,有點陌生。難度偏小,雖然我沒有拿滿,老師還把後面的迭代方向告訴了我們,也更方便我們的設計,這一次對我來說應該是一次突破,因為我從未有一次如此清楚我程式碼的結構和問題,但我也有一種無力感因為我的思路行不通,要更換思路進行變換,理論可行,實踐為零。
設計和分析:



踩坑心得和改進建議:
我對異常處理和變化處理的操作一直不太能夠實現,對電子元件直接進行電阻處理再根據開關變化對電阻進行二次變化是行不通的,不能正常處理並聯電路的問題(開關均閉合,開關一開一閉,開關一開一閉但又一條路電阻為零)。在對這些問題的處理中非零返回是常態,只能放棄這種思路,採用緣路判斷:在對處理時遍歷判斷元器件並進行賦值,再對並聯電路進行特殊處理單獨寫一種方法透過對並聯電路的判斷來確定電路情況這樣可以一舉兩得同時解決並聯套並聯的情況(理論可行,實踐還在操作透過判斷並聯電路的大小來判斷開關的數量再判斷開關的數量是否匹配,若匹配則再進行下一步判斷把開關開的電路單拿出來組成新的並聯電路)這樣就將複雜問題簡單化,從而解決問題。另外的問題就是對於其他的問題就是精度丟失。
兩次大作業連著沒寫完讓我很崩潰,第一次是設計問題,開關總是保持一種狀態,只拿了一半分,排序問題也是不會collection.sort,只能用最原始的取存重排這樣就使程式碼變得更加繁雜。我現在所採用的就是把電子元件當做最大的父類,旗下子類包括聯結器,用電器和電路,再對電路,聯結器和用電器進行細分,沒有采用引腳因為過於麻煩,用電壓可以直接清晰地表述出該電路的佔電情況,而不是借用引腳把電路串起來,做到遍歷電路,但這樣也用好處,那就是可以有很大的容錯率前提是自己的程式碼是正確的情況下。
我的改進思路如下:

  1. 把對聯結器狀態的判斷和設定放在最前面,緊接著就是對電路通路的判斷,把通路拿出來重新組裝電阻,在這裡就包含了並聯串並聯和並聯套並聯的情況。
  2. 把電子元件的建立物件取消電阻,對用電器裡包含電阻並在建立物件後用set方法來決定電阻,對全部都關上的情況不視為電阻無窮大,直接重構電路,對於短路的情況也是一樣的,在並聯電路中只要出現一條短路的情況就直接判斷電阻為零,否則對電阻進行計算,相加減。
  3. 最後是帶入電壓進行計算,直接讓220V進入匯流排路,根據分壓的情況下,判斷用電器的狀態,並將狀態記錄下來。
  4. 輸出還是一個一個的輸出,用debug來檢查輸出是否存在漏洞或者問題。
    如果上面的思路不行(大機率是會出現非零返回的情況,出錯就出在並聯電路的電阻上),就要對並聯電路的函式進行重寫,令其實現重構電路的功能。
    我的思路較為複雜,我室友認為可以簡化在對電路進行處理的時候就確定好電路,接著用分壓的方法完成計算,這樣在最先處理的時候就已經完成了對電路的處理,一舉兩得,而我則是把他們拆成兩部分,程式碼更復雜,考慮的也更麻煩.對最大父類用抽象類,將他們都封裝好即可。
    我覺得最難的部分就是這裡改進部分的實現因為這裡涉及多次遍歷還有多次的集合巢狀,把並聯電路當成用電器,不清楚並聯的巢狀程度可能會對題目有影響,因為是多重巢狀,在寫這次Blog的時候還沒有想到該怎麼解決這個問題,其他的就如上述所說就可以實現,我認為我和那些滿分程式碼的最大區別就是思路,我的思路經常不能被實現,就算能被實現也會有很多誤差,這些誤差會嚴重影響到程式碼的實用性,還有就是思想的不同頻,我常常不會表達我的問題,我室友也不知道我想講什麼,這樣就好像被隔絕在一座荒無人煙的孤島上,我的本意是用最簡單的思路去實現程式碼功能,結果就是無法實現或者對亂序或特殊操作的難以實現,我自己基礎也不是很好,程式碼經常要寫好久,主要的時間就浪費在了思考上,經常帶著思路去寫程式碼,寫著寫著就搞不清楚自己在寫什麼了,一連幾次大作業都沒滿分,我逐漸開始不自信了,學程式碼的初期,我依靠ai去理解程式碼,有一段時間程式碼還不是很長的時候我會去找ai分析我的程式碼,看看我錯在哪裡,我對程式碼的排序記憶不清楚,經常是這次寫完下次就又不記得了,這樣的經歷讓我的程式碼之路曲折不斷,我堅持的原因是蔡柯老師說的要堅持寫程式碼,這次沒寫完下次·就要更早開始寫,要提前構思,如果掛了暑假就做大作業補考。反正就是不能退縮不能不寫,寫出來了就有進步,對比我第一次寫的程式碼,在對開關的判斷上還有重大失誤導致開關可以判斷狀態,但只支援一種狀態下的操作,這一度讓我的室友直呼牛逼,我的程式碼能力不是很強,但我想要學好,當初選這個專業的時候就是零基礎,我對計算機這類東西一竅不通,但我對寫程式碼開發網頁和軟體十分感興趣,來到了昌航就是為了學點真本事回去,身邊有這麼一群好室友,我一定要堅持下去。
    就是這串程式碼的問題:
點選檢視程式碼
public void calculateResistance(){
        for(int i=0;i<Mlist.size();i++){
            for(int j=0;j<Mlist.get(i).getTlist().size();j++) {
                for(int k = 0; k < Mlist.get(i).getTlist().get(j).getSlist().size();k++) {
                    if(Mlist.get(i).getTlist().get(j).getSlist().get(k).getName().matches("K\\d")) {
                        if(((K)Mlist.get(i).getTlist().get(j).getSlist().get(k)).getState()==0){
                            for(int l=0;l<Mlist.get(i).getTlist().get(j).getSlist().size();l++){
                                if(!Mlist.get(i).getTlist().get(j).getSlist().get(l).getName().equals(Mlist.get(i).getTlist().get(j).getSlist().get(k).getName())){
                                    clist.add(Mlist.get(i).getTlist().get(j));
                                }
                            }
                            double R=0;
                            for(int l=0;l<clist.size();l++){
                                R=R+clist.get(l).getResistance();
                            }
                            for(int l=0;l<Tlist.get(Tlist.size()-1).getSlist().size();l++) {
                                if(Tlist.get(Tlist.size()-1).getSlist().get(l).getName().equals(Mlist.get(j).getName())) {
                                    Tlist.get(Tlist.size()-1).getSlist().get(l).setResistance(R);
                                }
                            }
                        } else if(((K)Mlist.get(i).getTlist().get(j).getSlist().get(k)).getState()==1){
                            double R=0;
                            for(int l=0;l<Mlist.get(i).getTlist().get(j).getSlist().size();l++) {
                                R=R+Mlist.get(i).getTlist().get(j).getSlist().get(l).getResistance();
                            }
                            if(R==0){
                                for(int l=0;l<Tlist.get(Tlist.size()-1).getSlist().size();l++) {
                                    if(Tlist.get(Tlist.size()-1).getSlist().get(l).getName().equals(Mlist.get(j).getName())) {
                                        Tlist.get(Tlist.size()-1).getSlist().get(l).setResistance(R);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }*/
總結:自己實力不到家,菜就得多練,多跟室友分享討論,早點寫,多留出時間給自己改。

相關文章