1. 程式人生 > >結對編程 搭檔個人項目分析

結對編程 搭檔個人項目分析

題目 功能 語言 racket style 高內聚 項目分析 rand bracket

看別人的代碼,我覺得是一個痛苦又會有所收獲的過程,很多和自己的邏輯不相符的算法思路都是皺著眉頭硬看下去,但有的完全理解後,轉念一想好像又確實沒啥毛病,甚至還比自己的思路巧妙了那麽一些,拓展了自己下一次在面對同樣問題時的解決思路

隊友和我自己一樣,也是用了c++(雖然和java一樣都半斤八兩,但畢竟是大一就學的語言總有點親切的味道?)

先說優點,首先是註釋很清楚,清晰的註釋無疑讓我的閱讀體驗上升了不少,可以明了地看出算法的思路(緩緩放下了手中的刀.......)

int Primary(int number,string file_Name)  //生成小學試卷的函數 ,number為生成題目數量,file_Name為儲存.txt文件目錄 
{ int num_Bracket=0; //括號數目 int bra_left; //左括號 int bra_right; //右括號 int flag; int sum=0; srand(std::time(NULL)); //隨機種子 ofstream file; file.open(file_Name.data()); //打開需要儲存的.txt文件 for(int i=0;i<number;i++) //循環生成題目 { file<<i+1<<"."; //
題目編號 int num=rand()%4+1; //隨機操作數 for(int j=0;j<=num;j++) { bra_left=rand()%3+1; //隨機數,判斷是否生成左括號 flag=rand()%4; //隨機符號 if(bra_left!=1) //不產生左括號 { if(num_Bracket!=0) //前面的算式存在左括號 {
int bar_right=rand()%2+1; //隨機右括號 ,概率為1/2 if(bar_right==1) //生成右括號情況 { file<<rand()%100+1<<")"<<sym_Pri[flag]; num_Bracket--; //括號數目減一 } else file<<rand()%100+1<<sym_Pri[flag]; //不生成右括號 } else file<<rand()%100+1<<sym_Pri[flag]; //沒有左括號不生成右括號 } else if(j==0) { file<<rand()%100+1<<sym_Pri[flag]; } else { file<<"("<<rand()%100+1<<sym_Pri[flag]; //生成左括號,括號數目加一 num_Bracket++; } } file<<rand()%100+1; //保證至少存在兩個操作數 if(num_Bracket!=0) //是否都有對應的右括號 { for(int i=0;i<num_Bracket;i++) { file<<")"; //不對應則吧右括號全部加在最後 } } num_Bracket=0; file<<"="<<endl; file<<endl; //換行 } file.close(); //文件關閉 }

其次是老師上課時提到的高內聚問題,本次項目需求的小學、初中、高中出題算法都作為單獨的方法放到了主函數外,每個模塊都做好了自己的事,main函數中的調用就顯得簡單明了

再就是變量命名,雖然有點單詞不太恰當(hhh),但該大寫的地方都大寫了,再加上註釋也不會讓人對變量或者函數的作用產生什麽異議

然後就說到不好的地方

問題首先也出在上面粘出的代碼上,在生成小學題目的算法中,為了不讓一個括號直接包住了整個算式這樣的情況發生,隊友用這樣的語句

else if(j==0)
            {
                file<<tri<<rand()%100+1<<sym_Pri[flag];
            }

即第一個操作數前一定不會有左括號,強行阻止了這一情況的發生,但這樣的話,就導致了如(1+2)*3這樣的算式不會存在的缺陷

再然後的話,就是回車打少了代碼看著有點擁擠,按照我自己的習慣的話,我是習慣在一個功能模塊寫完之後多打一行回車,以分隔一下代碼,感覺就像寫作文時分自然段一樣?

最後的話,眾所周知,結對編程要寫ui了,然後!我們!都用的!c++!

也許這就是命吧

eclipse,打開

我繼續改代碼了

溜了溜了

結對編程 搭檔個人項目分析