一、实验目的

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

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

二、实验环境

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

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

三、实验内容

 

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

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

四、实验步骤:

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

 

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

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 KWIC {
 9     public static void main(String[] args) {
10 
11         //读取文件
12         List<String[]> result = getContext(new File("fileTemp/context.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、显示结果:

 

 

 

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/context.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、显示结果:

 

 

五、实验总结

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

posted on 2017-11-18 11:01  清沛  阅读(4675)  评论(0编辑  收藏  举报