版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、一實驗題目 自行下載自己最喜歡的小說1部。存儲為文本文檔。要求長篇小說,20萬字以上。任取其中10個人物,考慮他們的姓名、別名等等一系列因素。(1)統(tǒng)計每個人在小說中出現(xiàn)的次數(shù)并排序。(2)統(tǒng)計每個人在小說中出現(xiàn)的篇幅跨度(第一次出現(xiàn)距最后一次出現(xiàn)的篇幅)并排序。(3) 如果兩人在相距較短的一段文字中出現(xiàn),我們認為兩人有關系,距離越短,關系越近。自行設計統(tǒng)計標準,找出10個人中:1)關系最緊密的兩個人,關系最不緊密的兩個人。2)輸入一個人名,列出該人和其他人關系的緊密程度排名??磁c實際是否符合?如果不太符合,說明可能的原因。 二需求分析 本演示程序用 eclipse 編寫,完成小說人物的出現(xiàn)次
2、數(shù)統(tǒng)計,人物篇幅跨度統(tǒng)計以及人物間親密程度的統(tǒng)計。 統(tǒng)計人物出現(xiàn)次數(shù):編寫一個函數(shù),當傳入?yún)?shù)為人物名稱時可統(tǒng)計該人物名在小說中的出現(xiàn)次數(shù)。 人物篇幅跨度:編寫一個函數(shù),當傳入?yún)?shù)為人物名稱是可統(tǒng)計該人物名在小說中第一次出現(xiàn)的位置以及最后一次出現(xiàn)的位置,將最后一次出現(xiàn)位置減去第一次出現(xiàn)的位置比去小說通篇長度可得該人物名在小說中的人物篇幅跨度。 人物間親密程度:編寫一個函數(shù),當傳入?yún)?shù)為人物名一和人物名二時,統(tǒng)計人物名一與人物名二同時在某個字數(shù)范圍內(nèi)出現(xiàn)的篇幅占人物名一的篇幅之比就是人物名一與人物名二的親密程度。 制作功能選擇界面:界面包含有十個人物名的下拉列表,三個功能排序按鈕,一個文本區(qū)域可
3、輸出統(tǒng)計結果。三概要設計 1)為了實現(xiàn)上述程序功能,需要定義一下幾個類: Interface類:該程序的功能選擇界面,包含main函數(shù)。 Novelfunction1類:用來實現(xiàn)程序的第一個功能的類。 Novelfunction2類:用來實現(xiàn)程序的第二個功能的類。 Novelfunction3類:用來實現(xiàn)程序的第三個功能的類。 Saver類:用來保存程序運行后的統(tǒng)計結果,結果將統(tǒng)計在result.txt中。 在程序運行中,在界面中的下拉列表選定一位人物,選定后在界面的文本區(qū)域中會輸出該人物在小說中的出現(xiàn)次數(shù),篇幅跨度以及與其他九個人物間的親密程度;在界面中點擊功能按鈕“人物出現(xiàn)次數(shù)排序”,點擊
4、后文本區(qū)域會輸出十個人物在小說中出現(xiàn)次數(shù)的升序排序;在界面中點擊功能按鈕“人物篇幅跨度排序”,點擊后文本區(qū)域會輸出十個人物在小說中篇幅跨度的升序排序;在界面中點擊功能按鈕“人物關系密度排序”,點擊后文本區(qū)域中會輸出十個人物間親密程度最高的一組和親密程度最低的一組結果。四.源代碼:Interface:package novelproject;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JComboBox;import javax.swing.JLabel;import java.awt.Border
5、Layout;import java.awt.Color;import java.awt.Font;import java.awt.GridLayout;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import javax.swing.JButton;import javax.swing.JTextArea;im
6、port java.io.BufferedReader;import java.io.FileOutputStream;import java.io.FileInputStream;import java.io.File;import java.io.FileReader;import java.io.PrintStream;import java.util.Arrays;import java.util.HashMap;public class Interface extends JFrame implements ItemListener,ActionListenerprivate JLa
7、bel jbl=new JLabel("嫌疑犯X的獻身");private JLabel function=new JLabel("功能");private JPanel jpl=new JPanel();private BorderLayout bl=new BorderLayout(10,10);private JComboBox jcb=new JComboBox();private JButton jbt1=new JButton("出現(xiàn)次數(shù)排序");private JButton jbt2=new JButton("
8、;篇幅跨度排序");private JButton jbt3=new JButton("關系密度排序");private JTextArea jta=new JTextArea("以下是結果:n",30,30);private static String personname=null;private static String arr1=new String"湯川","草薙","岸谷","間宮","石神","靖子",&quo
9、t;美里","富堅","工藤","小代子" private static int arr2=new int10; private static HashMap<String,Integer> rls=new HashMap<String,Integer>(); private Font font1=new Font("黑體",Font.BOLD,20); private Font font2=new Font("華文新魏",Font.BOLD,16); priv
10、ate Font font3=new Font("黑體",Font.BOLD,14);public JPanel createWEST1() JPanel west1=new JPanel();west1.setLayout(new GridLayout(6,1,5,5);west1.add(jcb);jcb.addItem("請選擇人物");jcb.addItem("湯川");jcb.addItem("草薙");jcb.addItem("岸谷");jcb.addItem("間宮&qu
11、ot;);jcb.addItem("石神");jcb.addItem("靖子");jcb.addItem("美里");jcb.addItem("富堅");jcb.addItem("工藤");jcb.addItem("小代子");west1.add(function);west1.add(jbt1);west1.add(jbt2);west1.add(jbt3);return west1;public JPanel createWEST2()JPanel west2=new J
12、Panel();west2.setLayout(new FlowLayout();west2.add(createWEST1();return west2;public JPanel createNORTH()JPanel north=new JPanel();north.setLayout(new FlowLayout(FlowLayout.CENTER);north.add(jbl);return north;public JPanel createCENTER()JPanel center=new JPanel();center.add(jta);return center;public
13、 Interface() this.add(jpl);jpl.setLayout(bl);jpl.add(createWEST2(),BorderLayout.WEST);jpl.add(createNORTH(),BorderLayout.NORTH);jpl.add(createCENTER(),BorderLayout.CENTER);jta.setFont(font1);jbt1.setFont(font2);jbt2.setFont(font2);jbt3.setFont(font2);jbl.setFont(font1);function.setFont(font1);this.s
14、etBackground(Color.yellow);jcb.addItemListener(this);jbt1.addActionListener(this);jbt2.addActionListener(this);jbt3.addActionListener(this);this.setSize(500,600);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public void itemStateChanged(ItemEvent e)if(e.getStateChange()=I
15、temEvent.SELECTED)switch(String)e.getItem()case "湯川":personname="湯川" break;case "草薙":personname="草薙" break;case "岸谷":personname="岸谷" break;case "間宮":personname="間宮" break;case "石神":personname="石神" bre
16、ak;case "靖子":personname="靖子" break;case "美里":personname="美里" break;case "富堅":personname="富堅" break;case "工藤":personname="工藤" break;case "小代子":personname="小代子" break;try Saver.saver(personname);File fi
17、le=new File("result.txt");FileReader fr=new FileReader(file);BufferedReader br=new BufferedReader(fr); jta.setText("以下是結果;n");while(true)String msg=br.readLine();if(msg=null) break;jta.append(msg+"n");fr.close();br.close(); catch (Exception e1) e1.printStackTrace();publ
18、ic void actionPerformed(ActionEvent e)if(e.getSource()=jbt1)int i; HashMap<Integer,String> hm=new HashMap<Integer,String>();for(i=0;i<10;i+)try byte data=NovelFunction1.getData();arr2i=NovelFunction1.stat(data,arr1i);hm.put(arr2i,arr1i);catch (Exception e1) e1.printStackTrace();Arrays
19、.sort(arr2);jta.setText("以下是結果:n");for(int a:arr2)jta.append(hm.get(a)+" 的出現(xiàn)次數(shù):"+a+"n");else if(e.getSource()=jbt2)int i;float arr3=new float10;HashMap<Float,String> hm=new HashMap<Float,String>();for(i=0;i<10;i+)try arr3i=NovelFunction2.Span(arr1i);hm.pu
20、t(arr3i,arr1i);catch (Exception e1) e1.printStackTrace();Arrays.sort(arr3);jta.setText("以下是結果:n");for(float a:arr3)jta.append(hm.get(a)+" 的篇幅跨度為:"+a+"%"+"n");else if(e.getSource()=jbt3)jta.setText("以下是結果:n");for(int i= 0;i<10;i+)try rls=NovelFunct
21、ion3.Relationship2(arr1i);for(String a:arr1)if(arr1i!=a)if(rls.get(a)=100)jta.append(arr1i+"與"+a+"最親密為:"+rls.get(a)+"n");catch (Exception e1) e1.printStackTrace();for(int i= 0;i<10;i+)try rls=NovelFunction3.Relationship2(arr1i);for(String a:arr1)if(arr1i!=a)if(rls.ge
22、t(a)=0)jta.append(arr1i+"與"+a+"最不親密為:"+rls.get(a)+"n");catch (Exception e1) e1.printStackTrace();elseSystem.exit(0);public static void main(String args) throws Exceptionnew Interface(); NovelFunction1:package novelproject;import java.io.File;import java.io.FileInputStre
23、am;public class NovelFunction1 public static byte getData()throws Exception /讀文件File novel=new File("嫌疑犯X的獻身.txt");FileInputStream fis=new FileInputStream(novel);byte data=new byte(int)novel.length();fis.read(data);fis.close();return data;public static int stat(byte data,String pn)throws E
24、xception /統(tǒng)計次數(shù)String dataStr=new String(data);int time=0;for(int i=0;i<dataStr.length()-pn.length()-1;i+)String s3 =dataStr.substring(i,i+pn.length().toString();if(s3.equals(pn)time+;return time; NovelFunction2:package novelproject;import java.util.HashMap;public class NovelFunction2 public stati
25、c float Span(String pn)throws Exception byte data=NovelFunction1.getData();HashMap<String,Integer> hm1=new HashMap<String,Integer>();HashMap<String,Integer> hm2=new HashMap<String,Integer>();HashMap<String,Integer> hm3=new HashMap<String,Integer>(); String dataStr
26、=new String(data);int time=0;for(int i=0;i<dataStr.length()-pn.length()-1;i+)String s3 =dataStr.substring(i,i+pn.length().toString();if(s3.equals(pn )time+;if(time=1)hm1.put(pn,i);hm2.put(pn, i);hm3.put(pn, (hm2.get(pn)-hm1.get(pn);float span=(hm3.get(pn)*10000)/dataStr.length();return (span/100)
27、; NovelFunction3:package novelproject;import java.util.HashMap;public class NovelFunction3 private static float rs=new float10;private static HashMap<String,Float> rls=new HashMap<String,Float>();private static String arr=new String"湯川","草薙","岸谷","間宮&qu
28、ot;,"石神","靖子","美里","富堅","工藤","小代子"public static float Relationship1(String pn1,String pn2)throws Exceptionbyte data=NovelFunction1.getData();String dataStr=new String(data);int time=NovelFunction1.stat(data,pn1);int score=0;int length1=0;in
29、t length2=1000;for(;(length2<dataStr.length();length1+=1000,length2+=1000)for(int i=length1;i<length2-pn1.length()-1;i+)String s1=dataStr.substring(i,i+pn1.length().toString();for(int j=length1;(s1.equals(pn1)&&(j<length2-pn2.length()-1);j+)String s2=dataStr.substring(j,j+pn2.length
30、().toString();if(s2.equals(pn2)score+; break;float rs=(score*10000)/time);return rs/100;public static HashMap<String,Float> Relationship2(String pn)throws Exceptionfor(int i=0;i<10;i+)rsi=Relationship1(pn,arri);rls.put(arri,rsi);return rls; Saver:package novelproject;import java.io.FileOutp
31、utStream;import java.io.PrintStream;import java.util.Arrays;import java.util.HashMap;import javax.swing.JOptionPane;public class Saver public static String time=null;private static String sp=null;private static HashMap<String,Float> rls=new HashMap<String,Float>();private static String arr=new String"湯川","草薙","岸谷","間宮","石神","靖子","美里","富堅","工藤","小代子"public static void saver(S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 左室心肌致密化不全預后因素探究及與擴張型心肌病比較研究
- 大學生自我建構對錯失恐懼的影響-內(nèi)隱自尊的中介作用
- 植物-土壤微生物相互作用-從實驗到數(shù)據(jù)整合的跨尺度研究
- 新能源車高速電機模擬器控制系統(tǒng)及其穩(wěn)定性研究
- 二零二五年度跨境電商過橋墊資合作協(xié)議
- 4H-SiC JBS與GTO中子輻照損傷及其退化機理研究
- 二零二五年度宅基地使用權轉讓與農(nóng)村土地權益保障服務協(xié)議
- 二零二五年度離婚協(xié)議書財產(chǎn)分割范本:離婚后財產(chǎn)分割與子女教育基金
- 2025年度城市綠化建設項目預付款協(xié)議
- 2025年度體育賽事特邀藝人表演合同
- 醫(yī)學脂質(zhì)的構成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實踐路徑
- 廣東省湛江市廉江市2023-2024學年八年級上學期期末考試數(shù)學試卷(含答案)
- 2024年湖北省知名中小學教聯(lián)體聯(lián)盟中考語文一模試卷
- 油煙機清洗安全合同協(xié)議書
- 2024年云南省中考數(shù)學試題(原卷版)
- 污水土地處理系統(tǒng)中雙酚A和雌激素的去除及微生物研究
- 氣胸病人的護理幻燈片
- 《地下建筑結構》第二版(朱合華)中文(2)課件
- JB T 7946.1-2017鑄造鋁合金金相
- 包裝過程質(zhì)量控制
評論
0/150
提交評論