• 大小: 9KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Java
  • 标签: java  海明码  

资源简介

两种不同的做法,用java实现海明码,先输入一个数据,得到海明码,在输入海明码,如果错误,则提示哪位出错且纠正为正确的海明码

资源截图

代码片段和文件信息

/**
*@author xuanzerensheng
*/

方法一:
H1 H2 H3 H4 H5 H6 H7
P1 P2 D1 P3 D2 D3 D4
D4:P1 P2 P3        P1:D4 D2 D1         C[0]:P1 D4 D2 D1  
D3:P3 P2           P2:D4 D3 D1         C[2]:P2 D4 D3 D1
D2:P3 P1           P3:D4 D3 D2         C[3]:P3 D4 D3 D2  
D1:P2 P1


import java.util.Scanner;


public class Ham {

Scanner enter=new Scanner(System.in);
String s_data;           //输入的字符串类型的数据
int dlength;             //输入数据的长度
int[] data;              //将输入的数据转换成整型数据
int hlength;            //海明码长度
int[] ham;              //海明码
int plength;            //校验位长度
int[] p;                //校验位
int[] c;                //验证出错位数的数组

void input(){
System.out.println(“输入数据:“);
String s_data=enter.nextLine();
dlength=s_data.length();
data=new int[dlength];
for(int i=0;i data[i]=Integer.parseInt(s_data.substring(i i+1));
//System.out.print(data[i]);
}
generateHam();
}

void generateHam(){
int i=1; 
int label=1; //指向海明码的校验位
int k=data.length-1;    //指向数据位
while(Math.pow(2 i) i++;
}
plength=i;  //校验位位数
p=new int[plength];
c=new int[plength];
//System.out.println(“plength “+plength);
hlength=dlength+plength;
ham=new int[hlength];

/*
 * 向海明码中填写数据位
 */
for(int j=0;j if(j+1==label){
ham[j]=0;
label*=2;
}else{
ham[j]=data[k--];
}
}
/*for(int m=hlength-1;m>=0;m--){
System.out.print(ham[m]);
}*/

/*
 * 求海明码中的校验位
 */
int r; //指向校验位位数
int sum=0;
for(i=hlength;i>0;i--){
for(r=plength-1;r>=0;r--){
if(i!=Math.pow(2 r)&&sum+Math.pow(2 r)<=i){
ham[(int)Math.pow(2 r)-1]=(ham[(int)Math.pow(2 r)-1]+ham[i-1])%2;
//p[r]=(p[r]+ham[i-1])%2;
sum=sum+(int)Math.pow(2 r);
}else{
if(i==Math.pow(2 r)){
break;
}
}
}
sum=0;
}

/*for(int m=hlength-1;m>=0;m--){   
System.out.print(ham[m]);
}*/
System.out.print(“生成海明码为:“);
for(int m=0;m System.out.print(ham[m]);
}
System.out.println();
/*for(int m=plength-1;m>=0;m--){  
System.out.print(p[m]);
}*/
}


void group(){
int i;

int r; //指向校验位位数
int sum=0;
for(i=hlength;i>0;i--){
for(r=plength-1;r>=0;r--){
if(i!=Math.pow(2 r)&&sum+Math.pow(2 r)<=i){
c[r]=(c[r]+ham[i-1])%2;
//p[r]=(p[r]+ham[i-1])%2;
sum=sum+(int)Math.pow(2 r);
}else{
if(i==Math.pow(2 r)){
c[r]=(c[r]+ham[i-1])%2;
break;
}
}
}
sum=0;
}
/*for(i=c.length-1;i>=0;i--){
System.out.print(c[i]);
}*/
 }

   void check(){
    
     int sum=0;
        
     System.out.print(“提示处错位:“);
     for(int i=c.length-1;i>=0;i--){  //输出组信息
     System.out.print(c[i]);
     }
     System.out.println();
     for(int i=0;i      sum=sum+(int)(c[i]*Math.pow(2 i)); //求出第几位出错
     }
 //System.out.println(sum);
     if(sum==0){
    

评论

共有 条评论