130242014013-黃超-第3次實驗

1、實驗目的java

1.理解不一樣體系結構風格的具體內涵。學習

2.學習體系結構風格的具體實踐。this

2、實驗環境spa

硬件: (依據具體狀況填寫)code

軟件:Java或任何一種本身熟悉的語言對象

3、實驗內容blog

 

「上下文關鍵字」KWIC(Key Word in Context,文本中的關鍵字)檢索系統接受有序的行集合:每一行是單詞的有序集合;每個單詞又是字母的有序集合。經過重複地刪除航中第一個單詞,並把它插入行尾,每一行能夠被「循環地移動」。KWIC檢索系統以字母表的順序輸出一個全部行循環移動的列表。排序

嘗試用不一樣的策略實現這個系統。選擇2-3種體系結構風格來實現。get

4、實驗步驟:input

KWIC 的主/子程序體系結構風格示意圖以下所示: 

  

  KWIC 主程序/子程序風格的 Java 語言實現:

 1 public static void alphabetize(){ 
 2     String[] tmpArray = new String[shiftedLineIndexes.size()]; 
 3     shiftedLineIndexes.toArray(tmpArray);           Arrays.sort(tmpArray);           sortedLineIndexes=tmpArray; 
 4    } 
 5    public static void Output(String outputAddress){      FileWriter fw = null; 
 6    try { 
 7     fw = new FileWriter(outputAddress); 
 8    } catch (IOException e) { 
 9     // TODO Auto-generated catch block     e.printStackTrace(); 
10    } 
11    BufferedWriter bw=new BufferedWriter(fw); 
12                   for(int i=0;i<sortedLineIndexes.length;i++){ 
13                          try { 
14      bw.write(sortedLineIndexes[i]);      bw.newLine(); 
15       
16     } catch (IOException e) { 
17      // TODO Auto-generated catch block      e.printStackTrace(); 
18     } 
19                        }          try { 
20     bw.close(); 
21    } catch (IOException e) { 
22     // TODO Auto-generated catch block     e.printStackTrace(); 
23    } 
24    } 
25 public static void Input(String iFile){     FileReader fr=null;     try {    fr=new FileReader(iFile); 
26     
27     } catch (FileNotFoundException e) {    e.printStackTrace(); 
28     } 
29     BufferedReader br=new BufferedReader(fr);     textLines=new ArrayList<String>(); 
30     try {    while(br.ready()){ 
31           textLines.add(br.readLine()); 
32          } 
33     } catch (IOException e) {      e.printStackTrace(); 
34     } 
35  } 
36    public static void CircularShift(){     shiftedLineIndexes=new ArrayList<String>();     for(int i=0;i<textLines.size();i++){     String orinLine=textLines.get(i);     String sarray[]=orinLine.split(" ");      for(int j=0;j<sarray.length;j++){      String newLine=sarray[j];      if(sarray.length>1){ 
37       if(j==sarray.length-1){ 
38         
39        for(int k=0;k<(sarray.length-1);k++){ 
40         newLine=newLine+" "+sarray[k]; 
41        } 
42       } 
43       else{ 
44        for(int k=j+1;k<sarray.length;k++){ 
45         newLine=newLine+" "+sarray[k]; 
46        } 
47         
48        for(int m=0;m<j;m++){         newLine=newLine+" "+sarray[m]; 
49        } 
50       } 
51            } 
52       shiftedLineIndexes.add(newLine); 
53     }    }    }

KWIC 的面向對象程序體系結構風格示意圖以下所示: 

 

 

基本的計算模型: 

Input 模塊從文本文件 input.txt 中一行一行讀取單 

Shift 模塊用於將單詞移位。 Sort 模塊將單詞進行排序。 

Output 模塊將最終結果寫到文本文件 output.txt 中 

KWIC 面向對象風格的 Java 語言實現: 

 1 //InputStore.java import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; public class InputStore {  public ArrayList<String> ls; 
 2  public InputStore(ArrayList<String> ls){   this.ls=ls; 
 3  } 
 4  public void input(String inputFile){    FileReader fr=null;     try { 
 5    fr=new FileReader(inputFile);     } catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace(); 
 6     } 
 7     BufferedReader br=new BufferedReader(fr);     try {    while(br.ready()){ 
 8     ls.add(br.readLine()); 
 9          } 
10     } catch (IOException e) {    // TODO Auto-generated catch block      e.printStackTrace(); 
11     } 
12  } 
13 } //Output.java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; public class Output {  public ArrayList<String> ls; 
14  public Output(ArrayList<String> ls){   this.ls=ls; 
15  } 
16  public void output(String outputAddress){ 
17     
18       FileWriter fw = null;     try { 
19      fw = new FileWriter(outputAddress); 
20     } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace(); 
21     } 
22     BufferedWriter bw=new BufferedWriter(fw); 
23           
24           for(int i=0;i<ls.size();i++){ 
25              
26               try { 
27       bw.write(ls.get(i));       bw.newLine(); 
28      } catch (IOException e) { 
29       // TODO Auto-generated catch block       e.printStackTrace(); 
30      } 
31                         }           try { 
32      bw.close(); 
33     } catch (IOException e) { 
34      // TODO Auto-generated catch block      e.printStackTrace(); 
35     } 
36          } 
37  
38 } 
39  
40 //Alphabetizer.java import java.util.ArrayList; import java.util.Arrays; public class Alphabetizer {  public ArrayList<String> ls;  public Alphabetizer(ArrayList<String> ls){   this.ls=ls; 
41  } 
42   
43  public void alpha(){ 
44    
45    String[] tmpArray = new String[ls.size()]; 
46    ls.toArray(tmpArray); 
47          Arrays.sort(tmpArray);          for(int i=0;i<ls.size();i++){           ls.set(i, tmpArray[i]); 
48          } 
49       } 
50 } 
51  
52 //CircularShifter.java import java.util.ArrayList; public class CircularShifter {  public ArrayList<String> ls;  public CircularShifter(ArrayList<String> ls){   this.ls=ls; 
53  } 
54  public void shift(){ 
55     ArrayList<String> shiftedLineIndexes=new ArrayList<String>();     for(int i=0;i<ls.size();i++){ 
56     String orinLine=ls.get(i);     String sarray[]=orinLine.split(" ");      for(int j=0;j<sarray.length;j++){      String newLine=sarray[j];      if(sarray.length>1){        if(j==sarray.length-1){          for(int k=0;k<(sarray.length-1);k++){ 
57         newLine=newLine+" "+sarray[k]; 
58        } 
59       } 
60       else{ 
61        for(int k=j+1;k<sarray.length;k++){ 
62         newLine=newLine+" "+sarray[k]; 
63        } 
64         
65        for(int m=0;m<j;m++){         newLine=newLine+" "+sarray[m]; 
66        } 
67       } 
68          } 
69       shiftedLineIndexes.add(newLine); 
70     } 
71     } 
72      ls=shiftedLineIndexes; 
73  } 
74 } 
75  //Main.java import java.util.ArrayList; public class Main { 
76  public static void main(String[] args) { 
77   // TODO Auto-generated method stub 
78   ArrayList<String>ls=new ArrayList<String>(); 
79    
80   InputStore inputStore=new InputStore(ls); 
81   inputStore.input("input.txt"); 
82    
83   CircularShifter cs=new CircularShifter(ls); 
84   cs.shift(); 
85    
86   Alphabetizer alp=new Alphabetizer(cs.ls); 
87   alp.alpha(); 
88    
89   Output output=new Output(alp.ls);   output.output("output.txt"); 
90  } 
91 } 
92  
93  
94             
相關文章
相關標籤/搜索