我是一个学生,学JAVA才一学期,我们做Java课程设计,要实现哈夫曼编码,我写了一些程序,但不知道是哪错了,麻烦给位前辈帮忙看下 谢谢啦!!
import java.io.*;
public class Huff
{//定义成员变量
int numNode ,num;
int value[2][num], valueNode[2][num];//定义成员方法
void Huff()throws IOExceptiom{}//构造方法
public static void main(String args[]) throws IOException 
{
Huff huff = new Huff();
huff.class1();
huff.bm();
}
void class1(){};
void class2(int m,int n){};
void huffbm(){};


}void Huff()throws IOExceptiom
{String s;
int n,i;
InputStreamReader in;
BufferedReader m;
in = new InputStreamReader(System.in);
in = BufferedReader(in);
System.out.print("input the numbers of data:");
s = in.readLine();
n = Integer.parseInt(s);//确定字符个数
System.out.print("input"+s+"numbers");
for (i=0;i<n-1;i++)  //确定n个字符的权值并保存
{ s = inreadLine();
  value[0][i] = i;
  value[1][i] = Integer.parseInt(s);
  valueNode[0][i] = i;
  valueNode[1][i] = Integer.parseInt(s);
}
}void class1()
{int i,j,k,m,n;
 n=num;//对初始的num个权值排序
 for (i=0;i<=n-2;i++)
{k=i;
 for(j=i+1;j<=n-1;j++)
   if (valueNode[1][k]>valueNode[1][j]) k=j;
   if (i!=k)
    {m = valueNode[1][j];valueNode[1][j]=valueNode[1][k];valueNode[1][k] = m;
     m = valueNode[0][i];valueNode[0][i]=valueNode[0][k];valueNode[0][k] = m;}
  
 }}void class2(int m,int n)  //新增长节点权值
{
 int i,j,k,sum;
 sum = arr[1][0] + arr[1][1];//新增长节点权值
 int number = n-1;
 boolean ff = true;//有效下标上界及未插入的状态
 for (i=2;i<=number;i++)
 { if (valueNode[1][i]<=sum)  //新节点应插位置之前的元素移动
      {valueNode[1][i-2]=valueNode[1][i];valueNode[0][i-2]=valueNode[0][i-2]=valueNode[0][i];}
   else 
      { if (ff) //插入增长节点的权值和序号
        {valueNode[1][i-2]=sum;
         valueNode[0][i-2]=number-1;
         valueNode[1][i-1]=valueNode[1][i];
         valueNode[0][i-1]=valueNode[0][i];
         ff = false;//改变状态
         }
         else  //新节点之后节点定位移动
         {valueNode[1][i-1]=valueNode[1][i];
          valueNode[0][i-1]=valueNode[0][i];
         }
       }
    if (ff)
       {valueNode[1][num-1]=sum;
        valueNode[0][num-1]=number-1;
       }//插在最后
 }
   
}void huffbm()
{int huffVal[][]=new int[numNode][4];
 int i,j,km,num1,num2,val;
 int mm = num;//待合并数的个数
 for (i=0;i<number;i++)
  {if (i<num) huffVal[i][0]=value[1][i];
   else huffVal[i][0]=0;//权值初始化
   huffVal[i][1]=0;huffVal[i][2]=0;huffVal[i][3]=0;//左右孩子及双亲初始化
  }
for(i=mm+1;i<=m;i++)//二叉树的形成
{num1=valueNode[0][0];num2=valueNode[0][1];//最小和次小权值序号
 val=valueNode[1][0]+valueNode[1][1];权值之和
 huff.class2(i,mm--);//调用重排序方法 
 par=i;
 huffVal[num1][3]=par;huffVal[num2][3]=par;//修改所选树的双亲值域
 huffVal[par][0]=val;huffVal[par][3]=0;//对新增节点的权值和双亲赋值
 huffVal[par][1]=num1;huffVal[par][2]=num2;//确定其左右孩子值域
}
//对提供的num个字符进行编码
StringBuffer bm;
for(j=0;j<num;j++)
{j=1;
 bm=new StringBuffer("  ")
 par=huff[j][4];//确定双亲
 while (par!=0)
{if (huff[par][2]==j)
  bm.insert(0,'0');
 else bm.insert(0,'1');
  j=par;par=huff[par][4];//继续向根搜索
}
System.out.println(bm.toString);
}}

解决方案 »

  1.   

    你以前学C++的吧.这段话莫非是你的头文件{//定义成员变量 
    int numNode ,num; 
    int value[2][num], valueNode[2][num];//定义成员方法 
    void Huff()throws IOExceptiom{}//构造方法 
    public static void main(String args[]) throws IOException 

    Huff huff = new Huff(); 
    huff.class1(); 
    huff.bm(); 

    void class1(){}; 
    void class2(int m,int n){}; 
    void huffbm(){}; 
    } 很负责的告诉你,你写的不是java.先找个IDE对着书练习一下.
      

  2.   

    还是先认真学习java吧. 
    把你的代码放到eclipse中, n个错误!
    无言了.