130242014060-郑佳敏-第3次实验

Posted 虾虾虾虾米

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了130242014060-郑佳敏-第3次实验相关的知识,希望对你有一定的参考价值。

一、实验目的

1.理解不同体系结构风格的具体内涵。

2.学习体系结构风格的具体实践。

二、实验环境

硬件: 装好MyEclipse 2014及相关环境的window 7 笔记本一台

软件:Java或任何一种自己熟悉的语言

三、实验内容

 

“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。

尝试用不同的策略实现这个系统。选择2-3种体系结构风格来实现。

四、实验步骤:

     要求写具体实现代码,并根据实际程序,画出程序的总体体系结构图和算法结构图,以及运行结果截图。

 采用主/子程序的风格 和管道-过滤器风格

1、体系结构图:

 

 

2、简述体系结构各部件的主要功能,实现思想。

  上述的主程序/子程序的方法,将问题分解为主控制、输入、循环移动、按字母表排序和输出几个模块。

输入: 获取待处理的字符串或多个字符串

循环移动:将字符串循环移动,得到移动的所有结果

按字母表排序:将所有的移动结果进行排序

输出:将最后结果输出

  管道过滤器方法则是将问题分解为几个过滤器,分别处理字符串移动、排序、去重复,又分别将处理后的数据传给下一个过滤器

这里我用的是类来代替过滤器

 

3、写出主要的代码

   排序的方法:

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;
	}    

  

4、显示结果:

 

 

五、实验总结

在写移动单词的方法的时候,一开始是在课上写的,把所有代码都写在一个方法里,而且在上课的时候思路还在,所以没有写注释

 导致后面再次看这段代码的时候,完全看不出来程序的用意和目的。

后来我重新理清思路,将一个方法分成两个小的方法,但是出现了另一个问题:方法和方法之间的功能重叠度太大。过度的耦合使代码编写的过程,和外部调用的过程一团乱。

于是我按照实验要求的步骤,先画了我想设计的大致风格。先将功能划分开,然后再修改代码。终于让代码勉强比较容易“理解”。

 

以上是关于130242014060-郑佳敏-第3次实验的主要内容,如果未能解决你的问题,请参考以下文章

130242014060《电商系统某功能模块》的需求分析与设计的课程小结

130242014070-《电商系统某功能模块》的需求分析与设计的课程小结

科大奥瑞物理实验——测量锑化铟片的磁阻特性

操作系统第3次实验报告:管道

Linux内核设计第二周学习总结 完成一个简单的时间片轮转多道程序内核代码

嵌入式软件设计第9次实验报告