Hamming code Implementation in Java

Pre-requisite: Hamming code

Hamming code is a set of error-correction codes that can be used to detect and correct the errors that can occur when the data is moved or stored from the sender to the receiver. It is a technique developed by R.W. Hamming for error correction.

Examples:

Input: 
message bit = 0101
r1 r2 m1 r4 m2 m3 m4
      0     1  0  1
Output:
Generated codeword :
r1 r2 m1 r4 m2 m3 m4
0  1  0  0  1  0  1

Explanation:
Initially r1, r2, r4 is set to '0'.
r1 = xor of all bits position 
    which has '1' in its 0th-bit position
r2 = xor of all bits
    which has '1' in its 1st-bit position
r3 = xor of all bits
    which has '1' in its 2nd-bit position

Below is the implementation of the Hamming Code:

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to implement Hamming Code
class HammingCode {
  
    // print elements of array
    static void print(int ar[])
    {
        for (int i = 1; i < ar.length; i++) {
            System.out.print(ar[i]);
        }
        System.out.println();
    }
  
    // calculating value of redundant bits
    static int[] calculation(int[] ar, int r)
    {
        for (int i = 0; i < r; i++) {
            int x = (int)Math.pow(2, i);
            for (int j = 1; j < ar.length; j++) {
                if (((j >> i) & 1) == 1) {
                    if (x != j)
                        ar[x] = ar[x] ^ ar[j];
                }
            }
            System.out.println("r" + x + " = "
                               + ar[x]);
        }
  
        return ar;
    }
  
    static int[] generateCode(String str, int M, int r)
    {
        int[] ar = new int[r + M + 1];
        int j = 0;
        for (int i = 1; i < ar.length; i++) {
            if ((Math.ceil(Math.log(i) / Math.log(2))
                 - Math.floor(Math.log(i) / Math.log(2)))
                == 0) {
  
                // if i == 2^n for n in (0, 1, 2, .....)
                // then ar[i]=0
                // codeword[i] = 0 ----
                // redundant bits are initialized
                // with value 0
                ar[i] = 0;
            }
            else {
  
                // codeword[i] = dataword[j]
                ar[i] = (int)(str.charAt(j) - '0');
                j++;
            }
        }
        return ar;
    }
  
    // Driver code
    public static void main(String[] args)
    {
  
        // input message
        String str = "0101";
        int M = str.length();
        int r = 1;
  
        while (Math.pow(2, r) < (M + r + 1)) {
            // r is number of redundant bits
            r++;
        }
        int[] ar = generateCode(str, M, r);
  
        System.out.println("Generated hamming code ");
        ar = calculation(ar, r);
        print(ar);
    }
}

chevron_right


Output:

Generated hamming code 
r1 = 0
r2 = 1
r4 = 0
0100101

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Akanksha_Rai