📄 nhaff.java
字号:
package haff;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.*;
public class Nhaff //主类
{
public static void main(String[] args)
{
OneFrame frame=new OneFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class OneFrame extends JFrame
{
public OneFrame()
{
setTitle("helloworld");
setSize(W,H);
setLocation(300,200);
OnePanel panel=new OnePanel();
add(panel);
}
public static final int W=200;
public static final int H=150;
}
class OnePanel extends JPanel
{
public OnePanel()
{
JButton redbutton=new JButton("编码>>");
JButton bluebutton=new JButton("<<译码");
add(redbutton);
add(bluebutton);
setBackground(Color.YELLOW);
HF redListener=new HF();
NHF blueListener=new NHF();
redbutton.addActionListener(redListener);
bluebutton.addActionListener(blueListener);
}
private class NHF implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
char[] abcdef={'a','b','c','d','e','f'};
String a=JOptionPane.showInputDialog("请输入字符a的哈夫曼编码:");
String b=JOptionPane.showInputDialog("请输入字符b的哈夫曼编码:");
String c=JOptionPane.showInputDialog("请输入字符c的哈夫曼编码:");
String d=JOptionPane.showInputDialog("请输入字符d的哈夫曼编码:");
String e=JOptionPane.showInputDialog("请输入字符e的哈夫曼编码:");
String f=JOptionPane.showInputDialog("请输入字符f的哈夫曼编码:");
String h=JOptionPane.showInputDialog("请输入需要译码的哈夫曼编码:");
System.out.println("你输入的哈夫曼编码代表的字符串为:");
String temp="";
for(int i=0;i<h.length();i++)
{
temp=temp+h.charAt(i);
if(temp.equals(a))
{
System.out.print(abcdef[0]);
temp="";
}
if(temp.equals(b))
{
System.out.print(abcdef[1]);
temp="";
}
if(temp.equals(c))
{
System.out.print(abcdef[2]);
temp="";
}
if(temp.equals(d))
{
System.out.print(abcdef[3]);
temp="";
}
if(temp.equals(e))
{
System.out.print(abcdef[4]);
temp="";
}
if(temp.equals(f))
{
System.out.print(abcdef[5]);
temp="";
}
}
System.out.println("译码完毕;");
}
}
private class HF implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input;
char[] abcdef={'a','b','c','d','e','f'};
int n=6;
int[] num=new int[6];
for(int i=0;i<6;i++)
num[i]=0;
input=JOptionPane.showInputDialog("请输入字符串");
for(int i=0;i<input.length();i++)
{
int a=(int)(input.charAt(i));
switch (a)
{ case (int)'a':
num[0]++;
break;
case (int)'b':
num[1]++;
break;
case (int)'c':
num[2]++;
break;
case (int)'d':
num[3]++;
break;
case (int)'e':
num[4]++;
break;
case (int)'f':
num[5]++;
break;
}
}
HaffmanTree myHaff=new HaffmanTree(n);
HaffNode[] node=new HaffNode[2*n+1];
Code[] haffCode=new Code[n];
myHaff.haffman(num,node);
myHaff.haffmanCode(node,haffCode);
for(int i=0;i<n;i++)
{
System.out.print("字符"+abcdef[i]+"的权重Weight="+(double)(haffCode[i].weight)*100/(input.length())+"% 编码= ");
for(int j=haffCode[i].start+1;j<n;j++)
System.out.print(haffCode[i].bit[j]);
System.out.println();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -