ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:419.20KB ,
资源ID:11156366      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11156366.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA作业单词统计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA作业单词统计.docx

1、JAVA作业单词统计Java语言课程作业(第二次)题 目 第 1题 学 院 计算机学院 专 业 网络工程 班 别 09级(2)班 学 号 3109006536 姓 名 罗晓然 2011年10月24日一、课程题目 读入一个TXT文本(仅有英文单词序列组成),统计各个单词出现的次数,并以适当的图形形式表示结果。二、题目分析与设计 :1. 题目的需求: 1)按照题意,程序需要有读取TXT文本的功能; 2)读入的TXT文件仅由英文单词序列组成; 3)需要统计各个单词的出现次数; 4)需要以适当的图形形式表示结果;2. 界面设计过程及布局策略: 下图是运行时的程序界面:作为特定功能的程序,从布局上来看,

2、需要表现出“单词序列”以及“图形”两个主题部分,当然图形中也有单词标记;考虑到随着读入文件的增大,单词的数量以及单词的出现次数可能会达到一个相当的高度,因此图形部分必须是ViewPort和画板划分的形式,考虑到JAVA里SWING组件的便捷性,对于图形部分使用了一个JPanel和一个JScrollPane存放;为了便于查找特定的单词,模仿了当今大部分词典程序的设计,在左侧添加了一个列表框用于存放所有单词,双击列表框中的单词项目时,右侧的图表部分可以自动定位到相应的单词位置;而在菜单栏部分,则是“文件”菜单,菜单下有“打开”选项,通过此选项可以更换当前统计的TXT文件;程序窗体大小可自由更改,通

3、过相关处理,更改窗体大小不会影响到图表的表现;综上,我用了BorderLayout的布局方式,这种方式在这个程序中的优点是能让列表框保持一定宽度便于查找单词,同时不会影响图表为主的表现需求; 对于图表的表现形式,我才用了使用最为广泛、兼容性强的柱形图+折线图方式,并通过相应运算使得图形表现更为直观;3. 程序逻辑的实现:本程序思维导图如下:程序主要由窗体事件处理、文件操作子程序、绘图相关处理以及数据结构四部分组成;其中,窗体事件处理部分包括建立窗体、列表框事件处理、菜单事件处理、鼠标事件处理等;文件操作子程序由打开文件、处理文件数据、单词统计功能组成;本程序概要流程图如下(完整流程图见下页):

4、单词统计功能是本程序的主要功能,实现原理为,以非英文字母字符为分隔符划分字节缓存为字符串数组,然后通过比对逐个字符串是否存在于列表框中判定单词是否重复,重复则计数数组相应项计数值加一,不重复则加入到列表中。最后,单词计数数组、单词数、单词最大长度和单词最大计数作为绘制图表的主要数据用以绘图,其中单词最大长度用以确定图表的横向坐标轴单元格宽度,单词最大计数用以确定图表的高度,单词数用以确定宽度。绘图部分,使用了JPanel类的paintComponent方法通过Graohics类进行2D绘图。本程序完整流程图如下:4.所使用的开发环境:Eclipse SDK;关键代码解释及实现见流程图及注释;三

5、、测试分析运行程序,打开文件:加载窗口:移动滑块条,显示正常:双击列表框,跳转正常:缩放窗口,绘图正常:点击菜单更改文件,列表框及绘图正常:附录:源代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.util.regex.Pattern;public class IndiWordStatistics private GraphicsEnvironment GE; private GraphicsDevice GD; private DisplayMode DM

6、; public IndiWordStatistics() /* * 获取图形显示环境信息 */ GE = GraphicsEnvironment.getLocalGraphicsEnvironment(); GD = GE.getDefaultScreenDevice(); DM = GD.getDisplayMode(); /* * 建立主窗体 */ new WinMain(); public static void main(String args) new IndiWordStatistics(); public class WinMain extends JFrame impleme

7、nts MouseListener, ActionListener private static final long serialVersionUID = 0; public List KeyList; /列表框 public DiaPanel DPanel; /主画板 public JScrollPane jsp; public JScrollBar vsb; public JScrollBar hsb; public MenuItem miOpen; /打开文件 public int counts; /单词计数数组 public int count = 0; /单词数 public in

8、t MaxLength = 0; /单词长度最大值 public int MaxCount = 0; /单词计数最大值 public String fn; /文件名 public WinMain() setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout(3, 3); setSize(800, 480); /* * 设置窗体居中 */ setLocation(DM.getWidth()-800)/2, (DM.getHeight()-600)/2); MenuBar mb = new MenuBar(

9、); setMenuBar(mb); Menu m = new Menu(文件, true); m.add(miOpen = new MenuItem(打开); miOpen.addActionListener(this); mb.add(m); KeyList = new List(10, false); KeyList.addActionListener(this); if(!OpenFile() System.exit(0); this.setTitle(单词统计: +fn); DPanel = new DiaPanel(this); /* * 根据单词数等信息设置画板大小 */ DPa

10、nel.setPreferredSize(new Dimension(8*MaxLength+12)*count+40, MaxCount+72); jsp = new JScrollPane(DPanel); jsp.addMouseListener(this); jsp.validate(); vsb = jsp.getVerticalScrollBar(); hsb = jsp.getHorizontalScrollBar(); getContentPane().add(Center, jsp); getContentPane().add(West, KeyList); setVisib

11、le(true); vsb.setValue(vsb.getMaximum(); public void actionPerformed(ActionEvent e) if(e.getSource() = miOpen) /* * 更换当前文件 */ if(OpenFile() setTitle(单词统计: +fn); DPanel.GWidth = 8*MaxLength+12; DPanel.setPreferredSize(new Dimension(8*MaxLength+12)*count+40, MaxCount+72); DPanel.repaint(); vsb.setValu

12、e(vsb.getMaximum(); hsb.setValue(hsb.getMinimum(); else if(e.getSource() = KeyList) /* * 定位到目标单词 */ hsb.setValue(8*MaxLength+12)*KeyList.getSelectedIndex()+40); public void mouseClicked(MouseEvent e) if(e.getSource() = jsp) DPanel.repaint(); public void mousePressed(MouseEvent e) public void mouseRe

13、leased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public boolean OpenFile() /* * 读入文本到字节数组 */ FileDialog fd = new FileDialog(this, 请选择将要统计的TXT文件:); fd.setVisible(true); if(fd.getDirectory() = null | fd.getFile() = null) return false; File flData = new

14、File(fd.getDirectory(), fd.getFile(); fn = fd.getFile().toString(); if(fn = null) return false; KeyList.removeAll(); count = 0; byte buffer = new byte(int) flData.length(); try FileInputStream fis = new FileInputStream(flData); try fis.read(buffer); catch(IOException e) return false; catch(FileNotFo

15、undException e) JOptionPane.showMessageDialog(null, IO错误!); return false; /* * 初始化列表框及相关变量 */ String str = new String(buffer); String words = Ppile(a-zA-Z).split(str); counts = new intwords.length; for(String thisWord:words) if(!thisWord.matches(a-zA-Z+) continue; int side = getListSite(thisWord.toL

16、owerCase(); if(side MaxLength) MaxLength = thisWord.length(); count +; KeyList.add(thisWord.toLowerCase(); countsKeyList.getItemCount()-1 = 1; else countsside +; /* * 获取单词计数最大值 */ for(int i:counts) if(i MaxCount) MaxCount = i; return true; public int getListSite(String str) for(int i = 0; i KeyList.

17、getItemCount(); i+) if(str.equals(KeyList.getItem(i) return i; return -1; public class DiaPanel extends JPanel private static final long serialVersionUID = 0; WinMain Wnd; public int GWidth; public int GHeight; public DiaPanel(WinMain wnd) Wnd = wnd; GWidth = 8*Wnd.MaxLength+12; GHeight = 10; public

18、 void paintComponent(Graphics g) int lines; /行数 int lastX = 40; /上一个坐标点,用于绘制折线图 int lastY; Color ca = new Color(74, 153, 191); Color cb = new Color(83, 136, 51); Color cc = new Color(165, 22, 97); if(Wnd.MaxCount this.getHeight()-72) lines = (this.getHeight()-72)/10 + 1; else lines = Wnd.MaxCount/10

19、 + 2; lastY = lines*10-10; g.setColor(Color.WHITE); g.fillRect(0, 0, this.getWidth(), this.getHeight(); /绘制底板 g.setColor(Color.LIGHT_GRAY); /* * 绘制行线 */ for(int i = 1; i lines; i+) g.drawLine(40, i*10, this.getWidth(), i*10); g.drawLine(0, this.getHeight()-45, this.getWidth(), this.getHeight()-55); g.setColor(Color.BLACK); g.drawString(Word:, 0, this.getHeight()-50); g.drawString(Count:, 0, this.getHeight()-30); for(int i = 0; i 0; i-) g.drawString(String.valueOf(i*50), 0, lines*10-i*50-5);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1