《Java》Java實現一個“以鹿鼎記文字內容為角度,分析主、配角親密程度”的應用程式——原著的文字檔案做資料來源
阿新 • • 發佈:2019-02-17
【韋小寶和他的七個老婆】
韋小寶這個人是金庸筆下的唯一一個不會武功卻又如魚得水角色,身邊有七個老婆相伴,他更是許多金庸迷羨慕的人:權勢、地位甚至紅顏知己。那麼問題來了,七人中哪個是韋小寶最愛的,哪個又是最愛他的人呢?下面博主就從計算機的角度來為大家分析一下。
一、如何分析?
分析的思路很簡單,就是將原著的文字檔案作為資料來源,通過程式來計算韋小寶分別和他的七位老婆出現在同一個句子中的次數,次數最多的即為韋小寶最愛,當然這是從文字的角度來談的。
資料來源 ldj.txt
:
二、程式設計思路
程式設計思路流程如下:
三、源程式
【contrast.java】
import java.io.*;
public class contrast { // 建立類
public static void main(String[] args) { // 主方法
int sum_end = 0; //總的句號(。)次數
int end_mark = 0; //句號(。)計次
int data_count = 0; //資料計次
boolean flag = true; //控制while迴圈的標誌
int count[] = new int[7]; //計"主、配角出現次數"
//名字資料:阿珂、雙兒、方怡、沐劍屏、曾柔、蘇荃、建寧公主
int name[][] = { {38463,29634,0},{21452,20799,0},{26041,24609,0},
{27792,21073,23631},{26366,26580,0},{33487,33603,0},{24314,23425,0}};
File file = new File(args[0]); // 建立檔案物件
int rom[] = new int[(int) file.length()]; //定於儲存資料的陣列
int data_rom[] = new int[(int) file.length()];
try {
FileReader fr = new FileReader(file) ; //建立FileReader類物件
// 建立BufferedReader類物件
BufferedReader bufr = new BufferedReader(fr); //建立BufferedReader類物件
for(int sum=0;sum<file.length();sum++) //迴圈讀完整個檔案
{
rom[sum] = bufr.read(); //"讀"函式
if(rom[sum]==12290)
{
sum_end++; //總的句號數
}
}
while(flag)
{
int m = 0; //"韋小寶"標記符
int mark = 0;
int rl = 0;
int fl = (int) file.length();
for(int i=0;i<fl;i++) //以句號為結束標誌每次讀一句
{
data_rom[i] = rom[data_count];
data_count++;
if(data_rom[i]==12290)
{
fl = 1;
end_mark++;
}
rl = i+1;
}
for(int j=0;j<rl;j++) //判斷此句子中是否出現"韋小寶"三個字
{
if(data_rom[j]==38886)
{
mark = j+1;
if(data_rom[mark]==23567)
{
mark += 1;
if(data_rom[mark]==23453)
{
m = 1;
}
}
}
}
for(int r=0;r<7;r++) //迴圈判斷此句子中那幾位"老婆"出現
{
int wm = 0; //"老婆"標記符
for(int k=0;k<rl;k++)
{
if(data_rom[k]==name[r][0])
{
mark = k+1;
if(data_rom[mark]==name[r][1])
{
mark += 1;
wm = 1;
if(name[r][2]!=0)
{
wm = 0;
if(data_rom[mark]==name[r][2])
{
wm = 1;
}
}
}
}
}
if(m==1 && wm==1) //主、配角同時出現就+1
{
count[r]++;
}
}
if(end_mark==sum_end) //讀到最後一個句號就跳出while迴圈
{
flag = false;
}
}
System.out.println("\n韋小寶分別和他的七位妻子出現在同一句子中的次數:\n");
System.out.println("[韋小寶-阿珂]-------"+count[0]);
System.out.println("[韋小寶-雙兒]-------"+count[1]);
System.out.println("[韋小寶-方怡]-------"+count[2]);
System.out.println("[韋小寶-沐劍屏]-----"+count[3]);
System.out.println("[韋小寶-曾柔]-------"+count[4]);
System.out.println("[韋小寶-蘇荃]-------"+count[5]);
System.out.println("[韋小寶-建寧公主]---"+count[6]);
} catch (Exception e) { // 處理異常
e.printStackTrace();
}
}
}
四、分析結果
從結果可以看出,韋小寶和雙兒出現在同一句子中的次數最多。
所以得出結論:在作者金庸筆下,韋小寶的最愛是“雙兒”