130242014059-陈敬龙-第三次实验

一、实验目的

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

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

二、实验环境

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

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

三、实验内容

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

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

四、实验步骤:

       1:管道----过滤器风格的实现

  1.1 体系结构图

    

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

  Input:返回一个保存有每行数据的字符串集合

  Shift类:将传入的字符串集合进行分割和移动处理

  Alphabetizet: 将传入的字符串按照字符在字符表中的大小进行排序

  Output: 输出传入的字符串集合

1.3 代码实现:

test.txt文本内容:

  运行类:

  

package com.cjl.oo;

import java.util.ArrayList;

public class Run {
    public static void main(String[] args) {
        ArrayList<String> kwicList = new ArrayList<>();
        ArrayList<String> lineList = Input.getTxt("F:\\test.txt");
        kwicList = Shift.Move(lineList);
        kwicList = Alphabetizer.sort(kwicList);
        Output.writer(kwicList);
    }

}

  Input类

package com.cjl.oo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Input {

    public static  ArrayList<String> getTxt(String fileName) {
        ArrayList<String> lineTxt=new ArrayList<String>();
        try {
            BufferedReader inputFile = new BufferedReader(new FileReader(fileName));
            String line;
            while ((line = inputFile.readLine()) != null){
                lineTxt.add(line);
            }
        } catch (Exception e) {
            System.err.print("wrong");
            System.exit(1);
        }
        return lineTxt;
    }

}

Shift类

package com.cjl.oo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;

public class Shift {

    public static ArrayList<String> Move(ArrayList<String> lineTxt){
        ArrayList<String> kwicList=new ArrayList<String>();
        Iterator<String> it=lineTxt.iterator();
        while(it.hasNext()){
            StringTokenizer token=new StringTokenizer(it.next());
            ArrayList<String> tokens=new ArrayList<String>();
            int i=0;
            //循环添加单词

            int count=token.countTokens();
            while(i<count){
                //System.out .println(token.nextToken().toString());
                tokens.add(token.nextToken());
                i++;
            }

            //display(tokens);
            //切割各个单词,不断改变起始值和利用loop实现位移。
            for(i=0;i<count;i++){
                StringBuffer lineBuffer=new StringBuffer();
                int index=i;
                for(int f=0;f<count;f++){

                    //从头继续位移
                    if(index>=count)
                        index=0;
                    //存入StringBuffer
                    lineBuffer.append(tokens.get(index));
                    lineBuffer.append(" ");
                    index++;
                }
                String tmp=lineBuffer.toString();
                //System.out .println("the buffer is "+tmp);
                kwicList.add(tmp);

            }

        }
        return kwicList;
    }

}
Alphabetizer 类
package com.cjl.oo;

import java.util.ArrayList;
import java.util.Collections;

public class Alphabetizer {
    public static ArrayList<String> sort(ArrayList<String> kwicList){
        Collections.sort(kwicList,new AlphabetizetComparator());
        return kwicList;
    }
}
AlphabetizetComparator类
package com.cjl.oo;

import java.util.Comparator;

public class AlphabetizetComparator implements Comparator<String> {
    @Override
    public int compare(String str1,String str2){
        if(str1==null&&str2==null){
            throw new NullPointerException();
        }
        int resultValue=0;
        char ch1=str1.charAt(0);
        char ch2=str2.charAt(0);
        resultValue=ch1-ch2;
        return resultValue;

    }
}

Output类

package com.cjl.oo;

import java.util.ArrayList;
import java.util.Iterator;

public class Output {
    public static void writer(ArrayList<String> kwicList){
        Iterator<String> it=kwicList.iterator();
        System.out.println("the output is ");
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

  1.4显示结果

  2:主程序  /  子程序 风格的实现

  2.1 体系结构图

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

  input:从本地文件中读取数据,将readline读到的行数据存到集合lineTxt 中,直到读到最后一行为止。

  shift: 获取每个单词,存入tokens。切割各个单词,不断改变起始值和通过循环实现位移

  alphabetizet:通过实现Comparator接口重写compare方法来比较两个字符的大小,再通过Collections的sort方法对经过切割和移动过的字符集进行排序

  out:将排序过的字符集依次输出到控制台
代码实现:

  


import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.*;

public class KWIC_Main_Sub {    private ArrayList<String> kwicList=new ArrayList<String>();    private  ArrayList<String> lineTxt=new ArrayList<String>();    private BufferedReader inputFile;    public static void main(String[] args) {        KWIC_Main_Sub kms=new KWIC_Main_Sub();        kms.input("F:\\test.txt");        kms.shift();        kms.alphabetizer();        kms.output();

}

public  void input(String fileName) {        try {            inputFile = new BufferedReader(new FileReader(fileName));        } catch (Exception e) {            System.err.print("wrong");            System.exit(1);        }        String line;        try {            while ((line = inputFile.readLine()) != null) {                lineTxt.add(line);            }        } catch (IOException e) {// TODO Auto-generated catch block            e.printStackTrace();        }    }    public void output(){        Iterator<String> it=kwicList.iterator();        System.out.println("the output is ");        while(it.hasNext()){            System.out.println(it.next());        }    }    public  void shift(){        //获取每个单词,存入tokens        Iterator<String> it=lineTxt.iterator();        while(it.hasNext()){            StringTokenizer token=new StringTokenizer(it.next());            ArrayList<String>tokens=new ArrayList<String>();            int i=0;            //循环添加单词

int count=token.countTokens();            while(i<count){                //System.out .println(token.nextToken().toString());                tokens.add(token.nextToken());                i++;            }

//display(tokens);            //切割各个单词,不断改变起始值和利用loop实现位移。            for(i=0;i<count;i++){                StringBuffer lineBuffer=new StringBuffer();                int index=i;                for(int f=0;f<count;f++){

//从头继续位移                    if(index>=count)                        index=0;                    //存入StringBuffer                    lineBuffer.append(tokens.get(index));                    lineBuffer.append(" ");                    index++;                }                String tmp=lineBuffer.toString();                //System.out .println("the buffer is "+tmp);                kwicList.add(tmp);

}

}

}

public  void alphabetizer(){        Collections.sort(this.kwicList,new AlphabetizerComparator());    }    private class AlphabetizerComparator implements Comparator<String> {        @Override        public int compare(String o1,String o2){            if(o1==null&&o2==null){                throw new NullPointerException();            }            int compareValue=0;            char o1c=o1.charAt(0);            char o2c=o2.charAt(0);            compareValue=o1c-o2c;            return compareValue;

}

}}
 

2.3 显示结果:

时间: 2024-09-29 06:58:27

130242014059-陈敬龙-第三次实验的相关文章

130242014059-陈敬龙-实验一

实验报告 课程 软件体系结构与设计 实验名称  实验一:软件设计的网络支持环境 专业__软件工程__  班级_2班__  学号_130242014059_   姓名  陈敬龙 实验日期:2017年 9月15日   报告退发 (订正 . 重做) 一.实验目的 -       对软件体系结构这门课有一个初步的了解. 二.工具与准备工作 -       可上网的笔记本电脑... 三.实验内容 1.    概念理解 -       一个程序或计算机系统的软件体系结构包括一个或一组软件构件.软件构件的外部

第三次实验报告+061+陈小兰

一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实践.(作业若雷同,后上传者判定0分) 三.实验内容 1.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结. 要求写出测试用例表.执行情况和测试小结. 2.对手机上任意一款音乐软件进行黑盒测试. 要求:1)使用思维导图 2)根据场景法.状态图法 设计测试用例. 3)附加题:如有可

2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp3 免杀原理与实践

2019-2020-2 20175218陈敬勇 <网络对抗技术> Exp3 免杀原理与实践 一.实验任务 方法 正确使用msf编码器 msfvenom生成如jar之类的其他文件 veil 加壳工具 使用C + shellcode编程 使用其他课堂未介绍方法 通过组合应用各种技术实现恶意代码免杀 如果成功实现了免杀的,简单语言描述原理,不要截图.与杀软共生的结果验证要截图 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本 二.实验准备 基础知识 Msfvenom使用

复利计算三次实验总结

前两次实验提交的代码情况 语言 工具 代码行 工作量(人时) 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.对手机上任

LINUX第三次实验报告

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础             班级:201353 姓名:刘世鹏 郝爽 学号:20135304 20135335 成绩:             指导教师:娄嘉鹏       实验日期:2015.11.24 实验密级:         预习程度:           实验时间:15:30-17:30 仪器组次:         必修/选修:必修          实验序号:3 实验名称:  实时系统的移植