哈夫曼编码课程设计java版源代码.doc_第1页
哈夫曼编码课程设计java版源代码.doc_第2页
哈夫曼编码课程设计java版源代码.doc_第3页
哈夫曼编码课程设计java版源代码.doc_第4页
哈夫曼编码课程设计java版源代码.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

package mypackage;import java.awt.*;import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.lang.*;import javax.swing.Box;public class hufman public static void main(String args)myFrame my=new myFrame();class myFrame extends Frame implements ActionListener,Runnablepublic double frequences=new double50;public char letters=new char50;public Panel pan=new Panel(new BorderLayout();public Label letter=new Label(输入编码字母:,Label.CENTER);public Label frequence=new Label(对应频数(以逗号分隔):,Label.CENTER);public Label words=new Label(输入报文: ,Label.CENTER);public Label mawen=new Label(输入码文:,Label.CENTER);public Label translatedWords=new Label(语句:,Label.CENTER);public TextField word=new TextField(12);public TextField input1=new TextField(12);public TextField input2=new TextField(12);public TextField input3=new TextField(12);public TextField input4=new TextField(12);public Button compel=new Button(画树和编码);public TextArea code=new TextArea(,10,3,TextArea.SCROLLBARS_BOTH);public TextArea translation=new TextArea(,10,3,TextArea.SCROLLBARS_BOTH);public TextField tranwords=new TextField(12);public Label brand=new Label(编码后的码文);public Label bras=new Label(编码情况);public Label name=new Label(码文的翻译);public Button trans=new Button(编码语句);public Button controlTrads=new Button(译码);public String yiwen=;public String keyinformation=;public painting paint=new painting();public int lens;public String bianma=;public Thread dataLine=null;public List list=null;public Panel panaction=new Panel(new BorderLayout();public myFrame()super();setSize(800,700);this.setTitle(哈夫曼解码/译码器);Font font=new Font(,Font.BOLD,20);trans.addActionListener(this);controlTrads.addActionListener(this);code.setFont(font);tranwords.setFont(font);translation.setFont(font);input1.setFont(font);input2.setFont(font);word.setFont(font);input3.setFont(font);input4.setFont(font);Box boxh=Box.createVerticalBox();Box boxa=Box.createVerticalBox();Box boxu=Box.createHorizontalBox();Box boxv=Box.createVerticalBox();boxh.add(letter);boxh.add(frequence);boxh.add(words);boxh.add(translatedWords);boxh.add(mawen);boxa.add(input1);boxa.add(input2);boxa.add(word);boxa.add(input3);boxa.add(input4);boxu.add(boxh);boxu.add(boxa);boxv.add(boxu);boxv.add(compel);boxv.add(trans);boxv.add(controlTrads);boxv.add(name);boxv.add(tranwords);boxv.add(brand);boxv.add(translation);boxv.add(bras);boxv.add(code);pan.add(Center,boxv);panaction.add(Center,paint);Box boxg=Box.createHorizontalBox();pan.setBackground(Color.gray);boxg.add(pan);boxg.add(panaction);setLayout(new BorderLayout();add(Center,boxg);setVisible(true);compel.addActionListener(this);Thread kongzhi=new Thread(this);kongzhi.start();this.addWindowListener(new mywindowlistener();public void run()while(true)if(input1.getText().length()!=0|input2.getText().length()!=0)word.setEditable(false);else if(word.getText().length()!=0)input1.setEditable(false);input2.setEditable(false);else if(input1.getText().length()=0&input2.getText().length()=0&word.getText().length()=0)input1.setEditable(true);input2.setEditable(true);word.setEditable(true);public int getData()String inputs1=input1.getText();String inputs2=input2.getText();String baowen=word.getText();if(baowen.length()!=0)bianma=;input1.setText();input2.setText();code.setText();list=null;int flag=new int50;chararrayLetter=baowen.toCharArray();int count=new int50;int i,j;for(i=0;iarrayLetter.length;i+)flagi=0;counti=1;for(i=0;iarrayLetter.length;i+)for(j=i+1;jarrayLetter.length;j+)if(flagi=0)if(arrayLetteri=arrayLetterj)counti+;flagj=-1;for(i=0,j=0;jarrayLetter.length;i+,j+)if(flagj=-1)i-;elsefrequencesi=countj*1.0;lettersi=arrayLetterj;lens=i;int total=0;for(i=0;ilens;i+)total+=frequencesi;for(i=0;ilens;i+)frequencesi=frequencesi/(total*1.0);return 1;else if(inputs1.length()!=0)&(inputs2.length()!=0)bianma=;word.setText();code.setText();list=null;StringfrequencesLike=inputs2.split(,);if(frequencesLike.length=inputs1.length()int i;double total=0;char letterLike=inputs1.toCharArray();lens=letterLike.length;for(i=0;iletterLike.length;i+)lettersi=letterLikei;frequencesi=Double.parseDouble(frequencesLikei);total=total+frequencesi;for(i=0;iletterLike.length;i+)frequencesi=frequencesi/(total*1.0);lens=letterLike.length;return 1;else return 0;elsereturn 0;public void DispLeaf(Node b)if(b!=null)if(b.lchild=null&b.rchild=null)if(keyinformation.startsWith(pelcode,0)yiwen=yiwen+b.data;int pointer=pelcode.length();keyinformation=keyinformation.substring(pointer, keyinformation.length();DispLeaf(b.lchild);DispLeaf(b.rchild);public void createCode(Node b)if(b!=null)if(b.lchild=null)&(b.rchild=null)Node currNode=b;Node p=null;int start=40;char codeletter=new char40;while(currNode.parent!=null)p=currNode.parent;if(p.lchild=currNode)start-;codeletterstart=0;else if(p.rchild=currNode)start-;codeletterstart=1;currNode=p;pelcode=new String(codeletter,start,40-start);bianma=bianma+b.data+:+pelcode+ ;createCode(b.lchild);createCode(b.rchild);public void actionPerformed(ActionEvent e)if(e.getActionCommand().equals(画树和编码)if(getData()=1)list=new List(letters,frequences,lens);paint.list=list;paint.repaint();createCode(list.head);code.setText(bianma);else if(e.getActionCommand().equals(编码语句)if(getData()=1)charrespondingCode;Node importantNode=null;String translatedWords=;int i;String wordsInformation=input3.getText();respondingCode=wordsInformation.toCharArray();for(i=0;i=1)DispLeaf(paint.list.head);tranwords.setText(yiwen);public Node findNode(char letter)Node returnNode=searchNode(paint.list.head,letter);return returnNode;public Node searchNode(Node currNode,char letter)Node p;if(currNode=null)return null;else if(currNode.data=letter)return currNode;elsep=searchNode(currNode.lchild,letter);if(p!=null)return p;elsereturn searchNode(currNode.rchild,letter);class painting extends Canvas implements ActionListenerpublic double r=14,l=100;public int inix;public int iniy;public List list=null;public Node queue=new Node40;public painting()super();setSize(400,300);public void actionPerformed(ActionEvent e)repaint();public void paint(Graphics g)Font font=new Font(,Font.BOLD,20);int count=0;if(list!=null)inix=this.getWidth()/2;iniy=30;int head=-1; int tail=0;Node node=list.head;node.x=(int)inix;node.y=(int)iniy;queuetail=node;while(tail!=head)head=(head+1)%40;node=queuehead;g.setColor(Color.blue);g.drawOval(int)(node.x-r),(int)(node.y-r),(int)(2*r),(int)(2*r);if(count=0)g.setColor(Color.red);g.setFont(font);g.drawLine(int)(node.x-r*0.85),(int)(node.y+r/2),(int)(node.x-(l-r)*0.85),(int)(node.y+(l-r)/2);g.drawString(0, (int)(node.x-r*0.85+node.x-(l-r)*0.85)/2), (int)(node.y+r/2+node.y+(l-r)/2)/2);g.drawLine(int)(node.x+r*0.85),(int)(node.y+r/2),(int)(node.x+(l-r)*0.85),(int)(node.y+(l-r)/2);g.drawString(1, (int)(node.x+r*0.85+node.x+(l-r)*0.85)/2),(int)(node.y+r/2+node.y+(l-r)/2)/2);node.lchild.x=(int)(node.x-l*0.85);node.lchild.y=(int)(node.y+l/2);node.rchild.x=(int)(node.x+l*0.85);node.rchild.y=(int)(node.y+l/2);tail=(tail+1)%40;queuetail=node.lchild;tail=(tail+1)%40;queuetail=node.rchild;elsel=60;if(node.lchild!=null&node.rchild!=null)g.setColor(Color.red);g.setFont(font);g.drawLine(int)(node.x-r/2),(int)(node.y+r*0.85),(int)(node.x-(l-r)/2),(int)(node.y+(l-r)*0.85);g.drawString(0, (int)(node.x-r*0.85+node.x-(l-r)*0.85)/2), (int)(node.y+r/2+node.y+(l-r)/2)/2);g.drawLine(int)(node.x+r/2),(int)(node.y+r*0.85),(int)(node.x+(l-r)/2),(int)(node.y+(l-r)*0.85);g.drawString(1, (int)(node.x+r*0.85+node.x+(l-r)*0.85)/2),(int)(node.y+r/2+node.y+(l-r)/2)/2);node.lchild.x=(int)(node.x-l/2);node.lchild.y=(int)(node.y+l*0.85);node.rchild.x=(int)(node.x+l/2);node.rchild.y=(int)(node.y+l*0.85);tail=(tail+1)%40;queuetail=node.lchild;tail=(tail+1)%40;queuetail=node.rchild;elseg.drawString(new Character(node.data).toString(),(int)(node.x)-3,(int)(node.y)+3);try Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();count+;elseg.setFont(font);g.drawString(画 布,this.getWidth()/2-5,this.getHeight()/2);class Nodepublic String compelcode=null;public double frequence;public char data;public Node lchild;public Node rchild;public Node parent;public int x;public int y;public Node(double frequencelike,char datalike)this.frequence=frequencelike;this.data=datalike;lchild=rchild=null;parent=null;class Listpublic double frequences=new double50;public char letters=new char50;public int lens;public Node head=null;public int flag=new int50;public List(char letterOut,double frequencesout,int len)int i=0;lens=len;for(;ilen;i+)frequencesi=frequencesouti;lettersi=letterOuti;flagi=0;select();public void select()Node queue=new Node50;int flagqueue=new int50;int b;for(b=0;b50;b+)flagqueueb=0;int top=-1;while(check()=1)double min2=1;double min1=1;int i=1;int j=1;double margin;int k;for(k=0;klens;k+)if(flagk!=-1)if(frequenceskmin1)min2=min1;min1=frequencesk;j=i;i=k;else if(frequenceskmin2)min2=frequencesk;j=k;/得到两个频率

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论