130242014060-鄭佳敏-第3次實驗

1、實驗目的java

1.理解不一樣體系結構風格的具體內涵。算法

2.學習體系結構風格的具體實踐。學習

2、實驗環境設計

硬件: 裝好MyEclipse 2014及相關環境的window 7 筆記本一臺3d

軟件:Java或任何一種本身熟悉的語言blog

3、實驗內容排序

 

「上下文關鍵字」KWIC(Key Word in Context,文本中的關鍵字)檢索系統接受有序的行集合:每一行是單詞的有序集合;每個單詞又是字母的有序集合。經過重複地刪除航中第一個單詞,並把它插入行尾,每一行能夠被「循環地移動」。KWIC檢索系統以字母表的順序輸出一個全部行循環移動的列表。ip

嘗試用不一樣的策略實現這個系統。選擇2-3種體系結構風格來實現。ci

4、實驗步驟:字符串

     要求寫具體實現代碼,並根據實際程序,畫出程序的整體體系結構圖和算法結構圖,以及運行結果截圖。

 採用主/子程序的風格 和管道-過濾器風格

一、體系結構圖:

 

 

二、簡述體系結構各部件的主要功能,實現思想。

  上述的主程序/子程序的方法,將問題分解爲主控制、輸入、循環移動、按字母表排序和輸出幾個模塊。

輸入: 獲取待處理的字符串或多個字符串

循環移動:將字符串循環移動,獲得移動的全部結果

按字母表排序:將全部的移動結果進行排序

輸出:將最後結果輸出

  管道過濾器方法則是將問題分解爲幾個過濾器,分別處理字符串移動、排序、去重複,又分別將處理後的數據傳給下一個過濾器

這裏我用的是類來代替過濾器

 

三、寫出主要的代碼

   排序的方法:

public List<String> doSort(List<String> stringList){
		Collections.sort(stringList);
		return stringList;
	}

  移動單詞的方法

        public List<String> moveString(List<String> stringList){
		List<String> resultList = new ArrayList<String>();
		//循環取出全部的String
		for (String string : stringList) {
			List<String> temList = getAllSortResult(string);
			for (String string2 : temList) {
				resultList.add(string2);
			}
		}
		return resultList;
	}

	/**
	 * 獲取全部排序結果的方法
	 * 將須要排序的句子傳入
	 * 返回全部結果的List
	 * @param str
	 * @return
	 */
	public List<String> getAllSortResult(String str){
		List<String> resultList = new ArrayList<String>();
		String temString = str ;
		String currString = str;
		resultList.add(currString);
		while(true){
			//若移動後的字符串 與傳入的字符串相同,則跳出循環
			currString = circulation(currString);
			if (temString.equals(currString))
				break;
			else {
				resultList.add(currString);
			}
		}
		return resultList;
	}
	/**
	 * 字符串循環後移
	 * 一次移動一個單詞
	 * 將移動結果返回
	 * @param str
	 * @return
	 */
	public String circulation (String str){
		//檢合
		if (str == null || str.length() == 0) {
			throw new RuntimeException("the string is null。");
		}
		//獲取第一個非空字符到第一個空格
		int firstSpace = str.indexOf(" ");
		String firstWord = str.substring(0, firstSpace);
		//取出的單詞添加到字符串末尾
		String resultString = str.substring(firstSpace+1)+" "+firstWord;
		//將結果返回
		return resultString;
	}    

  

四、顯示結果:

 

 

5、實驗總結

在寫移動單詞的方法的時候,一開始是在課上寫的,把全部代碼都寫在一個方法裏,並且在上課的時候思路還在,因此沒有寫註釋

 致使後面再次看這段代碼的時候,徹底看不出來程序的用意和目的。

後來我從新理清思路,將一個方法分紅兩個小的方法,可是出現了另外一個問題:方法和方法之間的功能重疊度太大。過分的耦合使代碼編寫的過程,和外部調用的過程一團亂。

因而我按照實驗要求的步驟,先畫了我想設計的大體風格。先將功能劃分開,而後再修改代碼。終於讓代碼勉強比較容易「理解」。

相關文章
相關標籤/搜索