北交-程序設計II-個人訓練報告

個人訓練報告

xxxx 14281164

要求

1. 設計思想;

2. 程序的結構說明(類設計及相互關係)、功能實現;

3. 遇到的問題、解決途徑及心得體會等;

4. 對訓練題材、方式等的建議和意見;

5. 不接受簡單描述和單純截圖類的報告

《個人訓練》總結

先寫寫我的感想吧,從上週五到今天,除了星期六沒有坐在電腦前一整天,其他4天都在非常專注的‘趕作業’;首先對【多線程打印管理器】這道題,我提交的程序還是有很大的問題,雖然對wait()、join()、notify()、sleep()函數有了更多瞭解,但是實踐還是解決不了多線程併發這個問題,我的思路是:

    “將synchronized 放置在共享隊列printQueue上,對於 3個Producer,當其添加任務添加至隊列滿時wait();喚醒Printer開始執行任務,當Printer執行到任務隊列空時,則喚醒Producer線程,如此往復循環;將這四個線程都使用join()函數,這樣便能在main線程結束前執行完四個子線程。”

但是運行時還是有錯,明天就交,所以先交了個。。

對於那道【比賽排名】確實複雜,細節處理很多,必須時刻思路清晰才能解決每一個細節;所以我感覺,上手之前對題目的分析非常的重要,確定好建的類,方法函數成員變量等;才能避免很多邊寫邊改的問題。

我感覺這幾天對java的理解深刻了很多,低耦合模塊化,這兩個思想得到了深刻的實踐,越來越感覺模塊化的低耦合性的程序纔是效率最高的。

對以後編程這條路的思考:技術每天在變,學習不僅要寬度更要深度,堅持寫博客是一個不錯的沉澱技術的方式。

(不知道有沒有要求這篇感想的格式,隨意的寫了些感想,並順便上傳記錄在自己的博客中)

<參考博客鏈接>

JDBC快速入門教程http://www.yiibai.com/jdbc/jdbc_quick_guide.html

java多線程中的synchronized和wait/notify用法總結

http://xueyilee.iteye.com/blog/786072

UML常用圖的幾種關係的總結

http://blog.csdn.net/suxinpingtao51/article/details/8011335

java爬取網頁內容 簡單例子

http://www.tuicool.com/articles/ZnyMvu

 

 

1.A+B練習(牛刀小試)

1-1設計思想:基本的java語句即可實現,通過File in =new File("input.in"); File fout = newFile("output.out");實現讀入文件和輸出文件。

1-2設程序的結構說明:直線結構,直接輸出結果。沒有使用類的設計。

2源程序註釋

1-1設計思想:由題意可知,註釋分爲兩種://和/**/,所以,從文件輸入流中循環獲取數據,對每次獲取的一行,都分別對兩種註釋判斷一次(strline.indexOf(str);若找到則取最先出現的註釋符號,然後對當前行字符串進行處理輸出,如此循環直至文件流讀取結束。

1-2程序的結構說明:程序入口處放置while(scan.hasNextLine())循環讀取數據,然後增加ifelse語句判斷是否出現 // 或 /*以及誰先出現,當出現 // 時,截取 //之前的字符串輸出;當 /* 出現時,先判斷當前行是否存在結束標誌 */,若不存在責截取 /* 之前的字符串輸出,否則,輸出將 */ 之後的也一起輸出。沒有使用類的設計。

 

3文本分析

1-1設計思想:由題知這是一個要完成查詢特定字符串功能的程序,對於輸入文件中的數據,可用Java String類中的indexOf(ch) 函數查找待查字符串,並統計其出現的次數即可。

1-2程序的結構說明:借用Java String 類的indexOf(ch)       函數循環查找待查字符串,每找到一次後,判斷其左右是否爲非字母字符,並縮短主串長度,尋找下一個符合的值。程序中只使用while循環結構循環查找。沒有使用類的設計。

 

4路燈

1-1設計思想:本題還是一個水題,通過暴力求解每組數據的交叉部分並處理,即可在輸入完畢後得到互不相交的數組。由於需要頻繁操作規劃區域數組,所以定義一個類來實現相關功能。

1-2程序的結構說明:定義的類:ZONE 類,

class ZONE

   {int min;//座標 小

   int max;//座標 大

   int len;//區間

   public ZONE(int z1, int z2);//構造函數

   int getlen() ;//獲取長度

   static ZONEaddZONE(ZONE z, ZONE mainZ);}//處理兩個區域

在main函數中,循環讀取文件數據流並創建zone 類 實例;然後對每個zone實例進行其屬性判斷,復賦值交換,直至任意兩個zone類都沒有交叉;然後調用其方法.getlen();獲取每個類所覆蓋的長度,累加並輸出結果。

5時鐘

1-1設計思想:此題關鍵點在於如何區分不同點陣數字,對於題目給出的數字0-9,可看出每個數字獨一無二,程序設計時通過不同的判斷條件,嵌套的if-else語句即可逐步區分具體是哪個數字。

1-2程序的結構說明:主函數main(),讀取輸入字符串,存入String [] 數組;先尋找時間的 “:” ,因爲不論是什麼時間,其中的“:”永遠不變,我們便可以從這裏作爲突破點,對其旁邊的4個數字點陣,定義相對位移量offest:int,來操作;編寫函數staticint core(String[] s, int t) 函數體爲多個if- else函數,對傳遞進來的s 和t,進行辨認。返回結果。

 

6比賽排名

1-1設計思想:1-2程序的結構說明:

這道題是一道模擬題,模擬ACM oj的評判系統,對於參賽選手的提交,評判系統要能夠對提交的數據進行處理儲存,並實時統計所有選手的信息輸出榜單;這裏需要處理的細節比較多,運用面向對象的思想,這裏需創建一個 Person類將選手的信息封裝起來,便於管理;

Person類的成員變量有:String:name(選手信息);int:SolveNum(通過的題數);Problem[]:pbmarray(該選手對每道題的提交情況);

    

Problem 類則將每個題目封裝起來,其成員變量有:

boolean:isAC(記錄此題是否AC);int: pbmid(題目id);int:WA_cnt(提交評判未通過次數);String:Solvetime(記錄通過此題的時間,包括罰時);

以上爲類結構圖,對從文件讀取的字符串,先進行去重複數據,再進行排序,然後逐條分析數據存入Person數組,如此循環直至讀取結束,對每個person類的pbm[]數組,都統計其完成情況並記錄罰時;讀取結束後,便調用Comparable接口進行排序,按照結題數多-罰時少-id字典序靠前的原則依次輸出。

7*多線程打印管理器

1.  setPriority( ): 設置線程的優先權;

 

2.  join( ): 等待加入的線程執行完畢纔會執行下一個線程。加入的線程通過interrupt()來喚醒。

 

3.  wait( ): 類似sleep( ), 不同的是,wait( )會先釋放鎖住的對象,然後再執行等待的動作。注意,這個函數屬於Object類。另外,由於wait( )所等待的對象必須先鎖住,因此,它只能用在同步化程序段或者同步化方法內,否則,會拋出異常IllegalMonitorStateException。

我們可以利用wait()來讓一個線程在某些條件下暫停運行。例如,在生產者消費者模型中,生產者線程在緩衝區爲滿的時候,消費者在緩衝區爲空的時候,都應該暫停運行。如果某些線程在等待某些條件觸發,那當那些條件爲真時,你可以用 notify 和 notifyAll 來通知那些等待中的線程重新開始運行。不同之處在於,notify 僅僅通知一個線程,並且我們不知道哪個線程會收到通知,然而 notifyAll 會通知所有等待中的線程。換言之,如果只有一個線程在等待一個信號燈,notify和notifyAll都會通知到這個線程。但如果多個線程在等待這個信 號燈,那麼notify只會通知到其中一個,而其它線程並不會收到任何通知,而notifyAll會喚醒所有等待中的線程。

在這道題中,

這道題中我設置synchronized(printQueue);將synchronized 放置在共享隊列printQueue上,對於 3個Producer,當其添加任務添加至隊列滿時wait();

喚醒Printer開始執行任務,當Printer執行到任務隊列空時,則喚醒Producer線程,如此往復循環;

 

8*網絡爬蟲

1-1設計思想:

網絡爬蟲,通過分析http://acm.hdu.edu.cn/showproblem.php?pid=1000";

頁面元素可知,需要獲取的url  獲取 title 獲取題目時間限制;內存限制; 提交總數; 通過的提交數;題面描述 ; 輸入;輸出; 輸入樣例 ; 輸出樣例; 作者;等數據可由java包Jsoup第三方組件提供的接口快捷操作。

1-2程序的結構說明:

設計一個類封裝每個頁面的信息,然後通過下列語句來獲取並賦值

Elements elms_title =doc.select("title");

Elements elms_problem =doc.select("h1[^sty]");

Elements elms_lmt_num =doc.select("span:contains(Time Limit)");

Elements elms_7_12 =doc.select("div[class=panel_content]");

    

這個程序主要是對Jsoup的調用。

 

 

 

 

 

<結束>

xxx14281164 20160713

代碼上傳到git

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章