1、實驗目的java
1.理解不一樣體系結構風格的具體內涵。算法
2.學習體系結構風格的具體實踐。數據結構
2、實驗環境函數
硬件: (依據具體狀況填寫)學習
軟件:Java或任何一種本身熟悉的語言spa
3、實驗內容code
「上下文關鍵字」KWIC(Key Word in Context,文本中的關鍵字)檢索系統接受有序的行集合:每一行是單詞的有序集合;每個單詞又是字母的有序集合。經過重複地刪除航中第一個單詞,並把它插入行尾,每一行能夠被「循環地移動」。KWIC檢索系統以字母表的順序輸出一個全部行循環移動的列表。blog
嘗試用不一樣的策略實現這個系統。選擇2-3種體系結構風格來實現。排序
4、實驗步驟:接口
要求寫具體實現代碼,並根據實際程序,畫出程序的整體體系結構圖和算法結構圖,以及運行結果截圖。
一、體系結構圖:
二、簡述體系結構各部件的主要功能,實現思想。
例如:
上述的主程序/子程序的方法,將問題分解爲輸入(Input)、移動(Shifter)、按字母表排序(Alphabetizer)、輸出(Output)。
Input: 將讀取到的每行的數據保存到實現LineStorage接口的數據結構中去
shifter:主函數調用該方法,該方法對characters中的每行的數據進行循環移位,並將移位獲得的新行保存到實現LineStorage的數據結構中去
alphabetizer: 對circularShift中獲得的行數據進行按字母順序排序
Output:output方法迭代調用alphabetizer裏面的方法獲得按字母順序排好序的行數據,並輸出
Characters:實現字符的處理。讀取一行就用Characters抽象數據類型將該行存放,直到文件讀完爲止
3主要代碼:
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Scanner;
/**
*
* 採用主/子程序風格
* @author L
*
*/
public
class
Main {
private
List<String[]> inList =
new
ArrayList<String[]>();
private
List<String[]> outList =
new
ArrayList<String[]>();
public
static
void
main(String[] args) {
Main test =
new
Main();
test.input();
test.CircularShifter();
test.Alphabetizer();
test.output();
}
/**
* 輸入
*/
private
void
input() {
Scanner scanner =
new
Scanner(System.in);
System.out.println(
"========input========"
);
while
(
true
) {
String temp;
temp = scanner.nextLine();
if
(!temp.equals(
"!q"
)) {
inList.add(temp.split(
" "
));
}
else
{
break
;
}
}
}
/**
* 循環位移
*/
private
void
CircularShifter() {
ArrayList<String[]> tempList =
new
ArrayList<String[]>();
tempList.addAll(inList);
String temp;
for
(
int
i =
0
; i < tempList.size(); i++) {
for
(
int
j =
0
;j < tempList.get(i).length; j++) {
outList.add(tempList.get(i).clone());
temp = tempList.get(i)[
0
];
for
(
int
k =
0
;k < tempList.get(i).length-
1
; k++) {
tempList.get(i)[k] = tempList.get(i)[k+
1
];
if
(k == tempList.get(i).length-
2
){
tempList.get(i)[tempList.get(i).length-
1
]=temp;
}
}
}
}
}
/**
* 按字母表順序排序
*/
private
void
Alphabetizer(){
String[] temp;
for
(
int
i =
0
;i<outList.size();i++){
for
(
int
j = i;j<outList.size()-
1
;j++){
if
(outList.get(i)[
0
].toLowerCase().charAt(
0
)>outList.get(j+
1
)[
0
].toLowerCase().charAt(
0
)){
temp = outList.get(i);
outList.set(i, outList.get(j+
1
));
outList.set(j+
1
, temp);
}
}
}
}
/**
* 輸出
*/
private
void
output(){
System.out.println(
"========onput========"
);
for
(
int
i =
0
;i<outList.size();i++){
for
(
int
j =
0
;j<outList.get(i).length;j++){
System.out.print(outList.get(i)[j]+
" "
);
}
System.out.println(
""
);
}
}
}