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

				
时间: 2024-08-30 07:49:12

130242014061-王绍华-第三次实验的相关文章

王爽汇编第三版实验10

1. 显示字符串 1 assume cs:code 2 3 data segment 4 db 'Welcome to masm!',0 5 data ends 6 7 stack segment 8 db 16 dup (0) 9 stack ends 10 11 code segment 12 start: 13 mov dh,8 14 mov dl,3 15 mov cl,2 16 mov ax,data 17 mov ds,ax 18 mov si,0 19 call show_str

130242014061-王绍华-实验一

实验报告 课程 软件体系结构与设计   实验名称 软件设计的网络环境  第 1  页 专业 软件工程     班级  2班      学号  130242014061     姓名  王绍华 实验日期:   2017 年  9 月  14 日   报告退发 (订正 . 重做) 一.实验目的 1.复习软件工程的重要概念,熟悉软件体系结构与软件设计技术的基础概念与内容. 2.通过Internet搜索与浏览,了解网络环境中主流的软件体系结构与设计技术网站,掌握通过专业网站不断丰富软件体系结构和软件设计

Java实现 四则运算生成 (戴国权 &amp; 关绍华)

  GitHub仓库:https://github.com/BiuBiuBangBoom/mathcreate   项目要求: 题目:实现一个自动生成小学四则运算题目的命令行程序说明: 说明: 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷

第三次实验报告:通过抓取TCP了解运输层

第三次实验报告:通过抓取TCP了解运输层 姓名:王璐璐 学号:201821121037 班级:计算1812 0 摘要 在本次实验中,通过对TCP报文的解析,理解TCP协议的连接建立与连接释放过程,以此了解运输层之间可靠传输的工作原理.在使用Cisco Packet Tracer时,将会通过路由器来连接客户端与服务器,在此次实验中还会使用命令行来设置路由器,以此达到网络的联通. 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内

复利计算三次实验总结

前两次实验提交的代码情况 语言 工具 代码行 工作量(人时) JAVA Eclipse 约50 约3小时 第三次实验 估计时间 估计代码行 实际时间 实际代码行 3小时 100左右 约2.5小时 约130 总结:        这三次实验是一个由难到易的过程,我自己本人的编程能力不强,刚开始时无从下手,但是通过同学和网络的帮助,脑海中逐渐有了一个清晰的思路.框架去编写程序直至完成了作业.从这次实验中,我知道了孰能生巧的道理,编程需要多练习才能更快的敲出你需要的程序.

软件工程实验一 复利计算(第三次实验实验总结)

主题内容:复利计算器的第三次改进 追加题目: 4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 5.如果我希望在十年内将100万元变成200万元,应该找到报酬率在多少的投资工具来帮助我达成目标?如果想在5年后本金翻倍,报酬率就应至少为多少才行呢? 附加题:6.如果每年都将积蓄的3万元进行投资,每年都能获得3%的回报,然后将这些本利之和连同年金再投入新一轮的投资,那么,30年后资产总值将变为多少?如果换成每月

1202实验三 进程调度实验

一.实验目的 用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二.实验内容和要求 1.要求:设计一个有 N(N不小于5)个进程并发执行的进程调度模拟程序. 进程调度算法:“时间片轮转法”调度算法对N个进程进行调度. 2.完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一个进程控制块(PCB)表示.进程控制块包含如下信息:进程名.优先级.到达时间.需要运行时间.已用CPU时间.进程状态等等. 2) 每个进程的状

第三次实验草稿

Java第三次实验 : 实     验    报     告 学号:20135303 姓名:魏昊卿 指导教师:娄嘉鹏   实验名称:Java敏捷开发与xp实现 实验内容: 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(

第三次实验报告+160+曾元鹏

开发人员代码:http://www.cnblogs.com/linpanhuang/p/6790891.html 一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实践.(作业若雷同,后上传者判定0分) 三.实验内容 1.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结. 要求写出测试用例表.执行情况和测试小结. 2.对手机上任