版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一实验题目 自行下载自己最喜欢的小说1部。存储为文本文档。要求长篇小说,20万字以上。任取其中10个人物,考虑他们的姓名、别名等等一系列因素。(1)统计每个人在小说中出现的次数并排序。(2)统计每个人在小说中出现的篇幅跨度(第一次出现距最后一次出现的篇幅)并排序。(3) 如果两人在相距较短的一段文字中出现,我们认为两人有关系,距离越短,关系越近。自行设计统计标准,找出10个人中:1)关系最紧密的两个人,关系最不紧密的两个人。2)输入一个人名,列出该人和其他人关系的紧密程度排名。看与实际是否符合?如果不太符合,说明可能的原因。 二需求分析 本演示程序用 eclipse 编写,完成小说人物的出现次
2、数统计,人物篇幅跨度统计以及人物间亲密程度的统计。 统计人物出现次数:编写一个函数,当传入参数为人物名称时可统计该人物名在小说中的出现次数。 人物篇幅跨度:编写一个函数,当传入参数为人物名称是可统计该人物名在小说中第一次出现的位置以及最后一次出现的位置,将最后一次出现位置减去第一次出现的位置比去小说通篇长度可得该人物名在小说中的人物篇幅跨度。 人物间亲密程度:编写一个函数,当传入参数为人物名一和人物名二时,统计人物名一与人物名二同时在某个字数范围内出现的篇幅占人物名一的篇幅之比就是人物名一与人物名二的亲密程度。 制作功能选择界面:界面包含有十个人物名的下拉列表,三个功能排序按钮,一个文本区域可
3、输出统计结果。三概要设计 1)为了实现上述程序功能,需要定义一下几个类: Interface类:该程序的功能选择界面,包含main函数。 Novelfunction1类:用来实现程序的第一个功能的类。 Novelfunction2类:用来实现程序的第二个功能的类。 Novelfunction3类:用来实现程序的第三个功能的类。 Saver类:用来保存程序运行后的统计结果,结果将统计在result.txt中。 在程序运行中,在界面中的下拉列表选定一位人物,选定后在界面的文本区域中会输出该人物在小说中的出现次数,篇幅跨度以及与其他九个人物间的亲密程度;在界面中点击功能按钮“人物出现次数排序”,点击
4、后文本区域会输出十个人物在小说中出现次数的升序排序;在界面中点击功能按钮“人物篇幅跨度排序”,点击后文本区域会输出十个人物在小说中篇幅跨度的升序排序;在界面中点击功能按钮“人物关系密度排序”,点击后文本区域中会输出十个人物间亲密程度最高的一组和亲密程度最低的一组结果。四.源代码: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("出现次数排序");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)+" 的出现次数:"+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 /统计次数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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 41869.3-2024光学和光子学微透镜阵列第3部分:光学特性测试方法
- 供热供气工程履约担保格式
- 2025版备货行业质量认证合同范本3篇
- 展览馆弱电系统改造合同模板
- 医疗服务票据管理策略与流程
- 2025年度绿色办公用品采购及回收利用合同3篇
- 纺织服装电力供应协议准则
- 城市滨水区改造房屋拆除工程协议
- 2025版电梯设备安装与维护合同范本3篇
- 船只租赁合同:水上建筑维修
- 房地产激励培训
- 山东省济南市2023-2024学年高二上学期期末考试地理试题 附答案
- 违章建筑举报范文
- 2024幼师年终工作总结
- Unit 4 Plants around us Part A(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 糖尿病伤口护理
- 人教版(2024新版)八年级上册物理期末必刷单项选择题50题(含答案解析)
- 建筑师业务实习答辩
- 在编警察聘用合同范例
- 安徽省芜湖市2023-2024学年高一上学期期末考试 生物 含解析
- 设备维护保养培训
评论
0/150
提交评论