130242014061-王绍华-第三次实验

Posted 绍华~

tags:

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

一、实验目的

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

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

二、实验环境

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

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

三、实验内容

 

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

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

四、实验步骤:

 1、管道-过滤器风格

1.1体系结构图

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

 上述的管道-过滤器方法,有5种过滤器:输入(input)、空格处理(trim)、循环移动(moving)、排序(sort)、输出(output)。

      input:  将控制台输入的每行的数据保存到数据结构中去。

      trim: 去掉首尾的空格,以及处理连续出现的空格。

      moving: 对集合进行循环移位,并将移位得到的新行保存到原先集合中去。

      sort: 利用Collections提供的sort()方法直接对集合进行排序。

      output: 把集合按顺序输出,显示在控制台上。

1.3主要代码。

public class Kwic {
/*
*控制台手动输入
*/ public static ArrayList<String> input() { System.out.println("-----------------");
     System.out.println("请输入:");
ArrayList<String> list = new ArrayList<String>();
        Scanner in = new Scanner(System.in);
        while (true) {
            String text = in.nextLine();
            if ("".equals(text)) {
                break;
            }
            list.add(text);
        }
        in.close();
        return list;
    }

    /***
     * 空格处理
     */
    public static ArrayList<String> trim(ArrayList<String> list) {
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            s = s.trim();
            for (int j = 0; j < s.length() - 1; j++) {
                if (s.substring(j, j + 2).equals("  ")) {
                    s = s.substring(0, j + 1) + s.substring(j + 2);
                    j--;
                }
            }
            list.set(i, s);
        }
        return list;
    }

    /**
     * 循环移动,并添加到集合
     */
    public static ArrayList<String> moving(ArrayList<String> list) {
        int count = list.size();
        for (int i = 0; i < count; i++) {
            String s = list.get(i);
            String[] arr = s.split(" ");
            for (int h = 1; h < arr.length; h++) {
                s = arr[h];
                for (int j = (h + 1) % arr.length; j != h; j++, j %= arr.length) {
                    s += " " + arr[j];
                }
                list.add(s);
            }
        }
        return list;
    }

    /**
     *排序
     */
    public static ArrayList<String> sort(ArrayList<String> list) {
        Collections.sort(list);
        return list;
    }

    /**
     *输出
     */
    public static void output(ArrayList<String> list) {
    System.out.println("------------------------");
System.out.println("输出为:");
    for (String s : list) {
            System.out.println(s);
        }
    }

    public static void main(String[] args) {
         output(sort(moving(trim(input()))));
    }
}
1.4显示结果

 

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

1.1、体系结构图

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

读文件:从本地读取测试的文本文件

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

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

输出显示:将结果输出到控制台进行显示

1.3主要代码

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;
    }
 
}
1.4结果
 

    

以上是关于130242014061-王绍华-第三次实验的主要内容,如果未能解决你的问题,请参考以下文章

2019春第三次课程设计实验报告

20165104-JAVA第三次实验

第三次实验总结

第三次实验报告

数据结构荣誉课--第三次实验解题报告

数据结构荣誉课--第三次实验解题报告