130242014029+黄超强+第3次实验

一、实验目的

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

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

二、实验环境

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

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

三、实验内容

 

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

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

四、实验步骤:

     要求写具体实现代码,并根据实际程序,画出程序的总体体系结构图和算法结构图,以及运行结果截图。

 

采用主/子程序的风格

1、体系结构图:

130242014029+黄超强+第3次实验_第1张图片

 

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


  

上述的主程序/子程序的方法,将问题分解为输入(InPut)、读取行(getLine)、循环移动(Shifter)、排序(sort)、输出(outPut)。

InPut: 读取文件信息

getLine:读取每行信息

shifter:每行的数据进行循环移位

sort:得到的行数据进行按字母顺序排序

outPut:输出结果

3、写出主要的代码

package test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class KWIC_1 {
   
    public static void main(String[] args) {
        List result = new ArrayList();
        String line="";
        //输入
        BufferedReader inputFile = inPut("test.txt");
        //读取行并循环移位
        while (line!= null) {
            //读取行
            line= getLine(inputFile);
            if (line !=null) {
                //循环移位
                shifter(line, result);
            }
        }
        //排序
        sort(result);
        //输出
        outPut(result);
    }
    //输入,文件数据读取
    public static BufferedReader inPut(String Filename) {
        BufferedReader inputFile = null;
        try {
                inputFile = new BufferedReader(new FileReader(Filename));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                System.err.println(("File error" + e.toString()));
                System.exit(1);
            }
        return     inputFile;
    }
    //获取行信息
    public static String getLine(BufferedReader inputFile) {
        String line ="";

        try {
            line = inputFile.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return line;
    }
    //循环移位
    public static void shifter(String line,List list) {
        StringTokenizer tokener = new StringTokenizer(line);
        String token = new String();
        int index;
        ArrayList tokens = new ArrayList();
        int count = tokener.countTokens();
        for (int j = 0; j < count; j++) {
            token = tokener.nextToken();
            tokens.add(token);
        }
        //对List中的字进行循环移位
        for (int i = 0; i < count; i++) {
            index=i;
            StringBuffer linebuffer = new StringBuffer();
            for (int j = 0; j < count; j++) {
                if (index >= count)
                    index = 0;
                linebuffer.append(tokens.get(index));
                linebuffer.append(" ");
                index++;
            }
            line = linebuffer.toString();
            list.add(line);
        }
    }
    //排序
    public static void sort(List list) {
        //对List中的字进行排序
        for (int i = 0; i < list.size()-1; i++) {
            for (int j = 0; j < list.size()-i-1; j++) {
                if (list.get(j).compareToIgnoreCase(list.get(j+1)) > 0){
                    String string = list.get(j+1);
                    list.set(j+1,list.get(j));
                    list.set(j,string);
                }
            }
        }
    }
    //输出
    public static void  outPut(List List) {
        System.out.println("-------------------------");
        for (int count = 0; count < List.size(); count++) {
            System.out.println (List.get(count));
        }
    }
}

 

4、显示结果:

130242014029+黄超强+第3次实验_第2张图片

130242014029+黄超强+第3次实验_第3张图片

 

管道过滤器风格

1、体系结构图:

 130242014029+黄超强+第3次实验_第4张图片

 

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

  上述的管道过滤器风格,分为五个过滤器:

       InPut: 读取文件信息

  getLine:读取每行信息

  shifter:每行的数据进行循环移位

  sort:得到的行数据进行按字母顺序排序

  outPut:输出结果

 

3、主要的代码             

package test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class KWIC_4 {
   
    public static void main(String[] args) {
       
       inPut("test.txt");
    }
    //输入,文件数据读取
    public static void inPut(String Filename) {
        BufferedReader inputFile = null;
        List result = new ArrayList();
        String line="";
        try {
                inputFile = new BufferedReader(new FileReader(Filename));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                System.err.println(("File error" + e.toString()));
                System.exit(1);
            }
        //读取行并循环移位
        while (line!= null) {
            //读取行
            line= getLine(inputFile);
            if (line !=null) {
                //循环移位
                shifter(line, result);
            }
        }
    }
    //获取行信息
    public static String getLine(BufferedReader inputFile) {
        String line ="";

        try {
            line = inputFile.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return line;
    }
    //循环移位
    public static void shifter(String line,List list) {
        StringTokenizer tokener = new StringTokenizer(line);
        String token = new String();
        int index;
        ArrayList tokens = new ArrayList();
        int count = tokener.countTokens();
        for (int j = 0; j < count; j++) {
            token = tokener.nextToken();
            tokens.add(token);
        }
        //对List中的字进行循环移位
        for (int i = 0; i < count; i++) {
            index=i;
            StringBuffer linebuffer = new StringBuffer();
            for (int j = 0; j < count; j++) {
                if (index >= count)
                    index = 0;
                linebuffer.append(tokens.get(index));
                linebuffer.append(" ");
                index++;
            }
            line = linebuffer.toString();
            list.add(line);
        }
        //排序
        sort(list);
    }
    //排序
    public static void sort(List list) {
        //对List中的字进行排序
        for (int i = 0; i < list.size()-1; i++) {
            for (int j = 0; j < list.size()-i-1; j++) {
                if (list.get(j).compareToIgnoreCase(list.get(j+1)) > 0){
                    String string = list.get(j+1);
                    list.set(j+1,list.get(j));
                    list.set(j,string);
                }
            }
        }
      //输出
        outPut(list);
    }
    //输出
    public static void  outPut(List List) {
        System.out.println("-------------------------");
        for (int count = 0; count < List.size(); count++) {
            System.out.println (List.get(count));
        }
    }
}

4、显示结果:

130242014029+黄超强+第3次实验_第5张图片

130242014029+黄超强+第3次实验_第6张图片

五、实验总结

调试程序中,遇到的问题,以及如何解决的。

 

作业博客要求:

   标题:是学号+姓名+第3次实验 

转载于:https://www.cnblogs.com/ishcq/p/7867189.html

你可能感兴趣的:(130242014029+黄超强+第3次实验)