资源简介
两种不同的做法,用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){
- 上一篇:Java毕业实习报告模板
- 下一篇:Android实时预览摄像头、绘制浮层
相关资源
- Java毕业实习报告模板
- java学生信息管理系统文档
- java模拟的ATM机实验报告
- java基础程序设计
- javax.jms.jar包
- esp8266和电脑连接使用的java源码,双通
- 基于java的21点纸牌游戏代码
- java 学生信息管理系统 登陆界面 连接
- JAVA坦克大战游戏开发毕业论文
- java计算机硬盘大小转换(BKBMBGBTBPB之
- java 排序算法可视化 演示程序
- Java 操作系统课设之模拟进程管理系统
- java项目,前后端分离视频教程源码
- Java Spring 的框架简介外文文献加翻译
- java 微信公众号支付完整版 demo自己刚
- 用 java 与数据库实现的报刊订阅系统
- JAVA贪吃蛇游戏毕业设计(源代码+论文
- 三角质心定位法--JAVA算法的实现
- 三边测量法java实现
-
java从本地读文件并上传Hba
se - 网络爬虫 Java实现原理
- Java网络爬虫及正文提取
- 遗传算法的Java实现源码
- 粒子群算法的Java实现源码
- 数据结构Java版教学计划编排
- 开发基于控制台的购书系统_java源代码
- 中控考勤机java开发步骤二---获取考勤
- C++调用java jar包测试代码
- Java版本 生命游戏
- java的各种各样的特效
评论
共有 条评论