⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nhaff.java

📁 哈夫曼树的实现
💻 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 + -