版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
...wd......wd......wd...一.實驗題目自行下載自己最喜歡的小說1部。存儲為文本文檔。要求長篇小說,20萬字以上。任取其中10個人物,考慮他們的姓名、別名等等一系列因素。(1)統(tǒng)計每個人在小說中出現(xiàn)的次數(shù)并排序。(2)統(tǒng)計每個人在小說中出現(xiàn)的篇幅跨度〔第一次出現(xiàn)距最后一次出現(xiàn)的篇幅〕并排序。(3)如果兩人在相距較短的一段文字中出現(xiàn),我們認為兩人有關(guān)系,距離越短,關(guān)系越近。自行設(shè)計統(tǒng)計標準,找出10個人中:1)關(guān)系最嚴密的兩個人,關(guān)系最不嚴密的兩個人。2)輸入一個人名,列出該人和其他人關(guān)系的嚴密程度排名??磁c實際是否符合如果不太符合,說明可能的原因。二.需求分析本演示程序用eclipse編寫,完成小說人物的出現(xiàn)次數(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ū)域可輸出統(tǒng)計結(jié)果。三.概要設(shè)計1〕為了實現(xiàn)上述程序功能,需要定義一下幾個類:①Interface類:該程序的功能選擇界面,包含main函數(shù)。②Novelfunction1類:用來實現(xiàn)程序的第一個功能的類。③Novelfunction2類:用來實現(xiàn)程序的第二個功能的類。④Novelfunction3類:用來實現(xiàn)程序的第三個功能的類。⑤Saver類:用來保存程序運行后的統(tǒng)計結(jié)果,結(jié)果將統(tǒng)計在result.txt中。在程序運行中,在界面中的下拉列表選定一位人物,選定后在界面的文本區(qū)域中會輸出該人物在小說中的出現(xiàn)次數(shù),篇幅跨度以及與其他九個人物間的親密程度;在界面中點擊功能按鈕“人物出現(xiàn)次數(shù)排序〞,點擊后文本區(qū)域會輸出十個人物在小說中出現(xiàn)次數(shù)的升序排序;在界面中點擊功能按鈕“人物篇幅跨度排序〞,點擊后文本區(qū)域會輸出十個人物在小說中篇幅跨度的升序排序;在界面中點擊功能按鈕“人物關(guān)系密度排序〞,點擊后文本區(qū)域中會輸出十個人物間親密程度最高的一組和親密程度最低的一組結(jié)果。四.源代碼:①Interface:packagenovelproject;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JComboBox;importjavax.swing.JLabel;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjavax.swing.JButton;importjavax.swing.JTextArea;importjava.io.BufferedReader;importjava.io.FileOutputStream;importjava.io.FileInputStream;importjava.io.File;importjava.io.FileReader;importjava.io.PrintStream;importjava.util.Arrays;importjava.util.HashMap;publicclassInterfaceextendsJFrameimplementsItemListener,ActionListener{privateJLabeljbl=newJLabel("嫌疑犯X的獻身");privateJLabelfunction=newJLabel("功能");privateJPaneljpl=newJPanel();privateBorderLayoutbl=newBorderLayout(10,10);privateJComboBoxjcb=newJComboBox();privateJButtonjbt1=newJButton("出現(xiàn)次數(shù)排序");privateJButtonjbt2=newJButton("篇幅跨度排序");privateJButtonjbt3=newJButton("關(guān)系密度排序");privateJTextAreajta=newJTextArea("以下是結(jié)果:\n",30,30);privatestaticStringpersonname=null;privatestaticString[]arr1=newString[]{"湯川","草薙","岸谷","間宮","石神","靖子","美里","富堅","工藤","小代子"};privatestaticint[]arr2=newint[10];privatestaticHashMap<String,Integer>rls=newHashMap<String,Integer>();privateFontfont1=newFont("黑體",Font.BOLD,20);privateFontfont2=newFont("華文新魏",Font.BOLD,16);privateFontfont3=newFont("黑體",Font.BOLD,14);publicJPanelcreateWEST1(){ JPanelwest1=newJPanel(); west1.setLayout(newGridLayout(6,1,5,5)); west1.add(jcb); jcb.addItem("請選擇人物"); jcb.addItem("湯川"); jcb.addItem("草薙"); jcb.addItem("岸谷"); jcb.addItem("間宮"); jcb.addItem("石神"); jcb.addItem("靖子"); jcb.addItem("美里"); jcb.addItem("富堅"); jcb.addItem("工藤"); jcb.addItem("小代子"); west1.add(function); west1.add(jbt1); west1.add(jbt2); west1.add(jbt3);returnwest1; }publicJPanelcreateWEST2(){ JPanelwest2=newJPanel(); west2.setLayout(newFlowLayout()); west2.add(createWEST1());returnwest2; }publicJPanelcreateNORTH(){ JPanelnorth=newJPanel(); north.setLayout(newFlowLayout(FlowLayout.CENTER)); north.add(jbl);returnnorth; }publicJPanelcreateCENTER(){ JPanelcenter=newJPanel(); center.add(jta);returncenter; }publicInterface(){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.setBackground(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); }publicvoiditemStateChanged(ItemEvente){if(e.getStateChange()==ItemEvent.SELECTED){switch((String)e.getItem()){case"湯川": personname="湯川";break;case"草薙": personname="草薙";break;case"岸谷": personname="岸谷";break;case"間宮": personname="間宮";break;case"石神": personname="石神";break;case"靖子": personname="靖子";break;case"美里": personname="美里";break;case"富堅": personname="富堅";break;case"工藤": personname="工藤";break;case"小代子": personname="小代子";break; }try{ Saver.saver(personname); Filefile=newFile("result.txt"); FileReaderfr=newFileReader(file); BufferedReaderbr=newBufferedReader(fr); jta.setText("以下是結(jié)果;\n");while(true){ Stringmsg=br.readLine();if(msg==null){break; } jta.append(msg+"\n"); } fr.close(); br.close(); }catch(Exceptione1){ e1.printStackTrace(); } } }publicvoidactionPerformed(ActionEvente){if(e.getSource()==jbt1){inti; HashMap<Integer,String>hm=newHashMap<Integer,String>();for(i=0;i<10;i++){try{byte[]data=NovelFunction1.getData(); arr2[i]=NovelFunction1.stat(data,arr1[i]); hm.put(arr2[i],arr1[i]); }catch(Exceptione1){ e1.printStackTrace(); } } Arrays.sort(arr2); jta.setText("以下是結(jié)果:\n");for(inta:arr2){ jta.append(hm.get(a)+"的出現(xiàn)次數(shù):"+a+"\n"); } }elseif(e.getSource()==jbt2){inti;float[]arr3=newfloat[10]; HashMap<Float,String>hm=newHashMap<Float,String>();for(i=0;i<10;i++){try{ arr3[i]=NovelFunction2.Span(arr1[i]); hm.put(arr3[i],arr1[i]); }catch(Exceptione1){ e1.printStackTrace(); } } Arrays.sort(arr3); jta.setText("以下是結(jié)果:\n");for(floata:arr3){ jta.append(hm.get(a)+"的篇幅跨度為:"+a+"%"+"\n"); } }elseif(e.getSource()==jbt3){ jta.setText("以下是結(jié)果:\n");for(inti=0;i<10;i++){try{ rls=NovelFunction3.Relationship2(arr1[i]);for(Stringa:arr1){if(arr1[i]!=a){if(rls.get(a)==100){ jta.append(arr1[i]+"與"+a+"最親密為:"+rls.get(a)+"\n"); } } } }catch(Exceptione1){ e1.printStackTrace(); } }for(inti=0;i<10;i++){try{ rls=NovelFunction3.Relationship2(arr1[i]);for(Stringa:arr1){if(arr1[i]!=a){if(rls.get(a)==0){ jta.append(arr1[i]+"與"+a+"最不親密為:"+rls.get(a)+"\n"); } } } }catch(Exceptione1){ e1.printStackTrace(); } } }else{ System.exit(0); } }publicstaticvoidmain(String[]args)throwsException{newInterface(); }}NovelFunction1:packagenovelproject;importjava.io.File;importjava.io.FileInputStream;publicclassNovelFunction1{publicstaticbyte[]getData()throwsException{//讀文件 Filenovel=newFile("嫌疑犯X的獻身.txt"); FileInputStreamfis=newFileInputStream(novel);byte[]data=newbyte[(int)novel.length()]; fis.read(data); fis.close();returndata; }publicstaticintstat(byte[]data,Stringpn)throwsException{//統(tǒng)計次數(shù) StringdataStr=newString(data);inttime=0;for(inti=0;i<dataStr.length()-pn.length()-1;i++){ Strings3=dataStr.substring(i,i+pn.length()).toString();if(s3.equals(pn)){ time++; } }returntime; }}NovelFunction2:packagenovelproject;importjava.util.HashMap;publicclassNovelFunction2{publicstaticfloatSpan(Stringpn)throwsException{byte[]data=NovelFunction1.getData(); HashMap<String,Integer>hm1=newHashMap<String,Integer>(); HashMap<String,Integer>hm2=newHashMap<String,Integer>(); HashMap<String,Integer>hm3=newHashMap<String,Integer>(); StringdataStr=newString(data);inttime=0;for(inti=0;i<dataStr.length()-pn.length()-1;i++){ Strings3=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)));floatspan=((hm3.get(pn)*10000)/dataStr.length());return(span/100); }}NovelFunction3:packagenovelproject;importjava.util.HashMap;publicclassNovelFunction3{privatestaticfloat[]rs=newfloat[10];privatestaticHashMap<String,Float>rls=newHashMap<String,Float>();privatestaticString[]arr=newString[]{"湯川","草薙","岸谷","間宮","石神","靖子","美里","富堅","工藤","小代子"};publicstaticfloatRelationship1(Stringpn1,Stringpn2)throwsException{byte[]data=NovelFunction1.getData(); StringdataStr=newString(data);inttime=NovelFunction1.stat(data,pn1);intscore=0;intlength1=0;intlength2=1000;for(;(length2<dataStr.length());length1+=1000,length2+=1000){for(inti=length1;i<length2-pn1.length()-1;i++){ Strings1=dataStr.substring(i,i+pn1.length()).toString();for(intj=length1;(s1.equals(pn1))&&(j<length2-pn2.length()-1);j++){ Strings2=dataStr.substring(j,j+pn2.length()).toString();if(s2.equals(pn2)){ score++;break; } } } }floatrs=((score*10000)/time);returnrs/100; }publicstaticHashMap<String,Float>Relationship2(Stringpn)throwsException{for(inti=0;i<10;i++){rs[i]=Relationship1(pn,arr[i]);rls.put(arr[i],rs[i]); }returnrls; }}Saver:packagenovelproject;importjava.io.FileOutputStream;importjava.io.PrintStream;importjava.util.Arrays;importjava.util.HashMap;importjavax.swing.JOptionPane;publicclassSaver{publicstaticStringtime=null;privatestaticStringsp=null;privatestaticHashMap<String,Float>rls=newHashMap<String,Float>();privatestaticString[]arr=newString[]{"湯川","草薙","岸谷","間宮","石神","靖子",
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體外診斷試劑行業(yè)相關(guān)項目經(jīng)營管理報告
- 建筑用金件的檢測行業(yè)經(jīng)營分析報告
- 辦理登機手續(xù)服務(wù)行業(yè)市場調(diào)研分析報告
- 蘇格蘭式短裙商業(yè)機會挖掘與戰(zhàn)略布局策略研究報告
- 創(chuàng)意寫作行業(yè)經(jīng)營分析報告
- 電力轉(zhuǎn)換器項目運營指導方案
- 失禁用墊產(chǎn)品供應(yīng)鏈分析
- 箬笠商業(yè)機會挖掘與戰(zhàn)略布局策略研究報告
- 信用證發(fā)行行業(yè)經(jīng)營分析報告
- 被動紅外探測器項目運營指導方案
- 國有資產(chǎn)委托經(jīng)營管理協(xié)議
- 2024年陜煤集團招聘筆試參考題庫含答案解析
- 冬季防溺水安全課件
- 傳統(tǒng)節(jié)氣《冬至》課件
- 智能機器人焊接
- 銷售人員如何列名單與分析名單
- 大客戶戰(zhàn)略:大客戶全生命周期管理
- 康得新財務(wù)審計案例分析
- 2024屆高考語文復習:小說敘事藝術(shù) 課件39張
- 23秋國家開放大學《EXCEL在財務(wù)中的應(yīng)用》形考作業(yè)1-4參考答案
- 蔬菜寶貝秘密課件
評論
0/150
提交評論