130242014067+李清灿+第3次实验
一、实验目的
1.理解不同体系结构风格的具体内涵。
2.学习体系结构风格的具体实践。
二、实验环境
硬件: (依据具体情况填写)
软件:Java或任何一种自己熟悉的语言
三、实验内容
“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。
尝试用不同的策略实现这个系统。选择2-3种体系结构风格来实现。
四、实验步骤:
要求写具体实现代码,并根据实际程序,画出程序的总体体系结构图和算法结构图,以及运行结果截图。
测试文件
A采用主/子程序的风格
1、体系结构图
2、简述体系结构各部件的主要功能,实现思想
读文件:从本地读取测试的文本文件
循环移位:对读取到的内容进行循环移位
排序:对移位后的结果进行排序
输出显示:将结果输出到控制台进行显示
3、主要代码
package com.lqc; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<String[]> result = getContext(new File("D:\\Desktop\\a.txt")); result = loopShift(result); sort(result); print(result); } private static void print(List<String[]> result) { for (String[] strings : result) { for (String string : strings) { System.out.printf(string + " "); } System.out.println(); } } private static void sort(List<String[]> shiftStrList) { shiftStrList.sort(Comparator.comparing(o -> o[0])); } private static List<String[]> loopShift(List<String[]> strList) { List<String[]> shiftStrList = new ArrayList<>(); for (String[] strings : strList) { for (int i = 0; i < strings.length; i++) { StringBuilder builder = new StringBuilder(); int j = i; for (int times = 0; times < 3; times++) { builder.append(strings[j]).append(","); j++; if (j == strings.length) { j = 0; } } shiftStrList.add(builder.toString().split(",")); } } return shiftStrList; } private static List<String[]> getContext(File file) { List<String[]> strList = new ArrayList<>(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while ((line = reader.readLine()) != null) { //以空格为分隔符 strList.add(line.split(" ")); } reader.close(); } catch (Exception e) { e.printStackTrace(); } return strList; } }
4、结果
B采用管道过滤器的风格
1、体系结构图
2、简述体系结构各部件的主要功能,实现思想
读文件:从本地读取测试的文本文件
循环移位:对读取到的内容进行循环移位
排序:对移位后的结果进行排序
输出显示:将结果输出到控制台进行显示
3、主要代码
package com.lqc; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<String[]> result = getContext(new File("D:\\Desktop\\a.txt")); // result = loopShift(result); // sort(result); // print(result); } private static List<String[]> getContext(File file) { List<String[]> strList = new ArrayList<>(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while ((line = reader.readLine()) != null) { //以空格为分隔符 strList.add(line.split(" ")); } reader.close(); } catch (Exception e) { e.printStackTrace(); } loopShift(strList); return strList; } private static List<String[]> loopShift(List<String[]> strList) { List<String[]> shiftStrList = new ArrayList<>(); for (String[] strings : strList) { for (int i = 0; i < strings.length; i++) { StringBuilder builder = new StringBuilder(); int j = i; for (int times = 0; times < 3; times++) { builder.append(strings[j]).append(","); j++; if (j == strings.length) { j = 0; } } shiftStrList.add(builder.toString().split(",")); } } sort(shiftStrList); return shiftStrList; } private static void sort(List<String[]> shiftStrList) { shiftStrList.sort(Comparator.comparing(o -> o[0])); print(shiftStrList); } private static void print(List<String[]> result) { for (String[] strings : result) { for (String string : strings) { System.out.printf(string + " "); } System.out.println(); } } }
4、结果