控制台的8位信息位的海明校验码
2015-11-04 09:27
585 查看
初学java 简单的实现 控制台的8位信息位的海明校验码
新手,有很多需要完善!
/* 下面实现能检测并能够校正一位错的而且能发现两位错的海明码的编码原理 校验位的位数K和信息位的位数N应满足下列关系式:2^(K) >= N+K+1 下列检验的为8位信息位,校验位为4位 一共1到12位 */ import java.util.*; import java.io.*; import java.math.*; public class Test1 { public static int[] result() { int N[]=new int[8];//信息位 int K[]= new int [4];//校验位 //int K1[]= new int [4];// 传送后新的校验位 System.out.println("请输入8位信息位"); Scanner scanner = new Scanner(System.in); String getResult = ""; //StringBuffer getResult = new StringBuffer(); for (int i=0;i<N.length ;i++ ) { int reader = scanner.nextInt(); N[i] = reader; } System.out.println("您输入的信息位为:"); for (int i =0;i<8 ;i++ ) { System.out.print(N[i]); } System.out.println(); //由于N 下标从0 开始 对应的校验运算 N下标减1 //K[0] = N[1]^N[2]^N[4]^N[5]^N[7]; //N[] 是倒序的,实际的0-7顺序是 从右到左的 K[0] = N[7]^N[6]^N[4]^N[3]^N[1];//计算第一个校验位 K[1] = N[7]^N[5]^N[4]^N[2]^N[1]; K[2] = N[6]^N[5]^N[4]^N[0]; K[3] = N[3]^N[2]^N[1]^N[0]; for (int i=K.length-1;i>=0;i-- ) { getResult +=K[i]; } System.out.println("偶校验 校验码为:"+getResult); return K; } public static void main(String[] args) { int []result1= result(); System.out.println("传送后一位出现错误 原码变为:"); int []result2 =result(); int []result3=new int[4]; int n= 0;//n为 两次计算校验码的异或 为(信息位+校验位)错位的位置 for (int i =0;i<4 ;i++ ) { result3[3-i] = result2[i]^result1[i]; } for (int i=0;i<result3.length ;i++ ) { System.out.print(result3[i]); n += result3[i]*(Math.pow(2,(3-i))); } //如果要得到信息位出错的位置就需要将 整个信息错误的位置减去校验位 System.out.println("信息错误的位置为:(从右到左)"+(n-4));//例如计算的结果为11则表示信息位第7位出错 } }
新手,有很多需要完善!
相关文章推荐
- eclipse maven 刷新报错
- Eclipse常用快捷键
- java 10 进制 转换为 2 进制, 利用递归
- java正则表达式基础
- 从”JAVA“而终 8:java循环判断语句讲解
- 编译器指令重排序 和 Java 内存模型
- SpringMVC和Struts2比较
- java代理 InvocationHandler接口实现
- Java中的静态方法调用静态成员变量
- 利用javaMail发送邮件
- 从JVM分析Java的类的加载和卸载机制
- java发送电子邮件email
- java学习笔记(三)—数组
- 离线使用tycho对eclipse RCP打包导出
- eclipse RCP界面从3.x切换到e4
- eclipse进度条从后台还原到前台
- 【java解惑】本地变量声明只能放在语句块中
- 【java解惑】类和实例的初始化循环问题
- 【java解惑】重载构造函数
- 【java解惑】递归异常与有限循环