码迷,mamicode.com
首页 > 其他好文 > 详细

130242014022-蓝宏铮-第3次实验

时间:2017-11-20 14:32:06      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:buffere   alpha   步骤   插入行   add   kwic   过滤器   for   tle   

一、实验目的

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

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

二、实验环境

硬件: (依据具体情况填写)

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

三、实验内容

 

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

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

四、实验步骤:

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

 

A.采用主/子程序的风格

1、体系结构图:

技术分享图片

 

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


    例如:

上述的主程序/子程序的方法,将问题分解为输入(Input)、移动(Shifter)、按字母表排序(Alphabetizer)、输出(Output)。

Input: 将读取到的每行的数据保存到实现LineStorage接口的数据结构中去

shifter:主函数调用该方法,该方法对characters中的每行的数据进行循环移位,并将移位得到的新行保存到实现LineStorage的数据结构中去

alphabetizer: 对circularShift中得到的行数据进行按字母顺序排序

Output:output方法迭代调用alphabetizer里面的方法得到按字母顺序排好序的行数据,并输出

Characters:实现字符的处理。读取一行就用Characters抽象数据类型将该行存放,直到文件读完为止

 ....

3、写出主要的代码

 1 import java.io.BufferedReader;
 2 import java.io.File;
 3 import java.io.FileReader;
 4 import java.util.ArrayList;
 5 import java.util.Comparator;
 6 import java.util.List;
 7 
 8 public class KWIC {
 9     public static void main(String[] args) {
10 
11         //读取文件
12         List<String[]> result = getContext(new File("fileTemp/lhz.txt"));
13         //循环移位
14         result = loopShift(result);
15         //排序
16         sort(result);
17         //输出
18         printf(result);
19     }
20 
21     private static List<String[]> getContext(File file) {
22 
23         List<String[]> strList = new ArrayList<>();
24         try {
25             BufferedReader reader = new BufferedReader(new FileReader(file));
26             String line = null;
27             while ((line = reader.readLine()) != null) {
28                 //以空格为分隔符
29                 strList.add(line.split(" "));
30             }
31             reader.close();
32         } catch (Exception e) {
33             e.printStackTrace();
34         }
35         return strList;
36     }
37 
38     private static List<String[]> loopShift(List<String[]> strList) {
39 
40         List<String[]> shiftStrList = new ArrayList<>();
41         for (String[] strings : strList) {
42             for (int i = 0; i < strings.length; i++) {
43                 StringBuilder builder = new StringBuilder();
44                 int j = i;
45                 for (int times = 0; times < 3; times++) {
46                     builder.append(strings[j]).append(",");
47                     j++;
48                     if (j == strings.length) {
49                         j = 0;
50                     }
51                 }
52                 shiftStrList.add(builder.toString().split(","));
53             }
54         }
55         return shiftStrList;
56     }
57 
58     private static void sort(List<String[]> shiftStrList) {
59 
60         shiftStrList.sort(Comparator.comparing(o -> o[0]));
61 
62     }
63 
64     private static void printf(List<String[]> result) {
65 
66         for (String[] strings : result) {
67             for (String string : strings) {
68                 System.out.printf(string + " ");
69             }
70             System.out.println();
71         }
72     }
73 }
4、显示结果:
input:

技术分享图片

output:

技术分享图片

B:采用管道过滤器的风格

1、体系结构图:

 技术分享图片

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

 

读取文件:从本地读取文件

循环移位:对读取到的内容进行循环移位

排序:对移位后的结果进行排序

输出:输出到控制台

3、写出主要的代码

技术分享图片
 1 import java.io.BufferedReader;
 2 import java.io.File;
 3 import java.io.FileReader;
 4 import java.util.ArrayList;
 5 import java.util.Comparator;
 6 import java.util.List;
 7 
 8 public class KWIC2 {
 9     public static void main(String[] args) {
10         
11         getContext(new File("fileTemp/lhz.txt"));
12     }
13 
14     private static void getContext(File file) {
15 
16         List<String[]> strList = new ArrayList<>();
17         try {
18             BufferedReader reader = new BufferedReader(new FileReader(file));
19             String line = null;
20             //循环读取行
21             while ((line = reader.readLine()) != null) {
22                 //以空格为分隔符
23                 strList.add(line.split(" "));
24             }
25             reader.close();
26         } catch (Exception e) {
27             e.printStackTrace();
28         }
29         //循环移位
30         loopShift(strList);
31     }
32 
33     private static void loopShift(List<String[]> strList) {
34 
35         List<String[]> shiftStrList = new ArrayList<>();
36         for (String[] strings : strList) {
37             for (int i = 0; i < strings.length; i++) {
38                 StringBuilder builder = new StringBuilder();
39                 int j = i;
40                 for (int times = 0; times < 3; times++) {
41                     builder.append(strings[j]).append(",");
42                     j++;
43                     if (j == strings.length) {
44                         j = 0;
45                     }
46                 }
47                 shiftStrList.add(builder.toString().split(","));
48             }
49         }
50         //排序
51         sort(shiftStrList);
52     }
53 
54     private static void sort(List<String[]> shiftStrList) {
55 
56         shiftStrList.sort(Comparator.comparing(o -> o[0]));
57         //输出
58         printf(shiftStrList);
59     }
60 
61     private static void printf(List<String[]> result) {
62 
63         for (String[] strings : result) {
64             for (String string : strings) {
65                 System.out.printf(string + " ");
66             }
67             System.out.println();
68         }
69     }
70 }
技术分享图片

4、显示结果:

input:

技术分享图片

output:

技术分享图片

五、实验总结

调试程序中,遇到的问题,以及如何解决的。

130242014022-蓝宏铮-第3次实验

标签:buffere   alpha   步骤   插入行   add   kwic   过滤器   for   tle   

原文地址:http://www.cnblogs.com/RealKing/p/7865863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!