控制台的8位信息位的海明校验码

初学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位出错

    }
}

新手,有很多需要完善!

你可能感兴趣的:(java-海明校验码)