資源簡介
兩種不同的做法,用java實現(xiàn)海明碼,先輸入一個數(shù)據(jù),得到海明碼,在輸入海明碼,如果錯誤,則提示哪位出錯且糾正為正確的海明碼
代碼片段和文件信息
/**
*@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;???????????//輸入的字符串類型的數(shù)據(jù)
int?dlength;?????????????//輸入數(shù)據(jù)的長度
int[]?data;??????????????//將輸入的數(shù)據(jù)轉(zhuǎn)換成整型數(shù)據(jù)
int?hlength;????????????//海明碼長度
int[]?ham;??????????????//海明碼
int?plength;????????????//校驗位長度
int[]?p;????????????????//校驗位
int[]?c;????????????????//驗證出錯位數(shù)的數(shù)組
void?input(){
System.out.println(“輸入數(shù)據(jù):“);
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;????//指向數(shù)據(jù)位
while(Math.pow(2?i) i++;
}
plength=i;??//校驗位位數(shù)
p=new?int[plength];
c=new?int[plength];
//System.out.println(“plength?“+plength);
hlength=dlength+plength;
ham=new?int[hlength];
/*
?*?向海明碼中填寫數(shù)據(jù)位
?*/
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;?//指向校驗位位數(shù)
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;?//指向校驗位位數(shù)
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){
????
- 上一篇:Java畢業(yè)實習報告模板
- 下一篇:Android實時預覽攝像頭、繪制浮層
評論
共有 條評論