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、结果

 

 

posted @ 2017-11-19 21:52  liqingcan  阅读(238)  评论(0编辑  收藏  举报