📄 mainjframe.java
字号:
/*
* MainJFrame.java
*
* Created on 2008年11月12日, 下午2:55
*/
package coding;
import javax.swing.JOptionPane;
import coding.QHTNode;
import coding.QHCode;
/**
*
* @author new
*/
public class MainJFrame extends javax.swing.JFrame {
/** Creates new form MainJFrame */
public MainJFrame() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jTextField4 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("\u8f93\u5165\u8981\u7f16\u7801\u7684\u4e32");
jLabel2.setText("\u7b97\u672f\u7f16\u7801\u7684\u7ed3\u679c\u4e3a");
jTextField2.setEditable(false);
jButton1.setText("\u5f00\u59cb\u7f16\u7801");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel3.setText("\u884c\u7a0b\u7f16\u7801\u7684\u7ed3\u679c\u4e3a");
jTextField3.setEditable(false);
jLabel4.setText("\u6bcf\u79cd\u5b57\u7b26\u7684\u6982\u7387");
jLabel5.setText("\u8bf4\u660e\uff1a\u8f93\u5165\u6982\u7387\u683c\u5f0f\u4e3aa,0.5,b,0.5\u7c7b\u4f3c\u683c\u5f0f\uff0c\u4e2d\u95f4\u8f93\u5165\",\"\u53f7\uff0c\u6982\u7387\u4e4b\u548c\u4e3a1\uff0c");
jLabel6.setText("\u5404\u4e2a\u6982\u7387\u90fd\u53ea\u80fd\u662f\u4ecb\u4e8e0\u4e0e1\u4e4b\u95f4\u7684\u5c0f\u6570\u3002");
jLabel7.setText("\u54c8\u5f17\u66fc\u7f16\u7801\u7684\u7ed3\u679c\u4e3a");
jScrollPane1.setAutoscrolls(true);
jScrollPane1.setHorizontalScrollBar(null);
jTextArea1.setColumns(20);
jTextArea1.setEditable(false);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.add(jLabel5, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE))
.add(layout.createSequentialGroup()
.addContainerGap()
.add(jLabel6, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 452, Short.MAX_VALUE)
.add(26, 26, 26))
.add(layout.createSequentialGroup()
.add(36, 36, 36)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 94, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 129, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(jTextField4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
.add(jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE)))
.add(layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 118, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 109, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 129, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(2, 2, 2)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.TRAILING, jTextField3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE)
.add(jTextField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE))))
.add(34, 34, 34))
.add(layout.createSequentialGroup()
.add(193, 193, 193)
.add(jButton1)
.addContainerGap(214, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(68, 68, 68)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel1))
.add(25, 25, 25)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel4)
.add(jTextField4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(30, 30, 30)
.add(jLabel5)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel6)
.add(15, 15, 15)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel2))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel3)
.add(jTextField3))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(jLabel7)
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 70, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(17, 17, 17)
.add(jButton1))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO 将在此处添加您的处理代码:
String input=jTextField1.getText().trim();
int L=input.length();
float A[];//输入的各种字符的概率
A=new float[100];
String B[];//输入的各种字符的集合
B=new String[100];
int count=0;
int l=0;
String possibility=jTextField4.getText().trim();
if(input.equals("")&&possibility.equals(""))
{JOptionPane.showMessageDialog(this,"必须输入要编码的字符串或不同字符的概率!");
}
if(possibility.startsWith(",")){
JOptionPane.showMessageDialog(this,"您的输入有误,请重新输入!");
}else if(!possibility.equals("")){
while(true){
l=possibility.indexOf(",");
B[count]=possibility.substring(0,1);
System.out.print("B["+String.valueOf(count)+"]="+B[count]+"\n");
possibility=possibility.substring(l+1);
if(possibility.equals("")){ JOptionPane.showMessageDialog(this,"您必须将每个字符对应的概率都输入,不要多输入或少输入!");}
l=possibility.indexOf(",");
if(l==-1){
A[count]=Float.parseFloat(possibility.substring(0));
System.out.print("A["+count+"]="+A[count]+"\n");
break;
}else{
A[count]=Float.parseFloat(possibility.substring(0,l));
System.out.print("A["+count+"]="+A[count]+"\n");
possibility=possibility.substring(l+1);
}
count++;
}//while
}//if(!possibility.equals(""))
if(!possibility.equals("")&&!input.equals("")){
float X[],Y[];//区间左右端
X=new float[100];
Y=new float[100];
float x=0,y=A[0];
System.out.print("count="+count+"\n");
for(int m=0;m<=count;m++){//求每种字符概率上下界
X[m]=x;
System.out.print("X["+m+"]="+X[m]+"\n");
Y[m]=y;
System.out.print("Y["+m+"]="+Y[m]+"\n");
x=y;
if(m+1<count) {
y=x+A[m+1];
}else{
y=1;
}
}
float l1=0;
float r=1;
float d=1;
String str=null;
for(int j=0;j<L;j++){
str=input.substring(j,j+1);//取第j+1个字符
System.out.print("第"+j+"个字符为:"+str+"\n");
for(int k=0;k<=count;k++){
if(str.equals(B[k])){
r=l1+d*Y[k];
System.out.print("r="+r+"\n");
l1=l1+d*X[k];
System.out.print("l1="+l1+"\n");
d=r-l1;
System.out.print("d="+d+"\n");
}
}
}
jTextField2.setText(String.valueOf(l1));//算术编码结果
}
if(!possibility.equals("")){
QHTNode[] hn=new QHTNode[100];
for(int i=0;i<=count;i++){
hn[i]=new QHTNode();
hn[i].c=B[i];
hn[i].weight=A[i];
}
HuffmanTree hfTree=new HuffmanTree();
hfTree.creatHuffmanTree(hn,count+1);
QHCode[] code=new QHCode[100];
hfTree.createHuffmanCode(hn,code,count+1);
String codevalue="";
for(int t=0;t<=count;t++){
codevalue+=code[t].code;
System.out.print(code[t].code);
}
jTextArea1.setText(codevalue);//哈弗曼编码结果
}
System.out.print("L="+L+"\n");
if(!input.equals("")){
count=1;
String C="";
String s="";
input=input+"#";
while(!input.equals("#")){
s=input.substring(0,1);
String tmp=input.substring(1,2);
if(s.equals(tmp)){
input=input.substring(1);
count++;
System.out.print("s="+s+"\n");
}else{
C+="("+s+","+String.valueOf(count)+")";
System.out.print(C+"\n");
input=input.substring(1);
count=1;
}
}
jTextField3.setText(C);//行程编码结果
}
}//GEN-LAST:event_jButton1ActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainJFrame().setVisible(true);
}
});
}
// 变量声明 - 不进行修改//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
// 变量声明结束//GEN-END:variables
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -