Question: Hamming Code Error Detection/Correcting in Java Hello all. I am trying to get the below code to display a message to the console when an

Hamming Code Error Detection/Correcting in Java

Hello all. I am trying to get the below code to display a message to the console when an error is corrected, as in the sample below:

File hamming.txt opened

Error in bit 9 corrected in character 2

Error in bit 3 corrected in character c

Error in bit 10 corrected in character p

File output.txt closed

Currently I am able to display the first and last line but not able to show the "Error in bit" portion. I am using hamming.txt as the input file which contains a list of hexadecimal numbers. How can I show the error in bit and corrected in character portion?

import java.io.*;

import java.util.*;

public class Hamming

{

private char letter; // The Ascii character with no parity bits

private int[] bits = new int[12];

private int code; // The integer value of the character with the parity bits added

public Hamming(char let) { letter = let; encode(); }

public Hamming(int c) { code = c; decode(); }

public int getCode() { return code; }

public char getLetter() { return letter; }

private void encode() {

int value = letter;

// Set value bits

for (int i = 0; i < 12; i++) {

if (i != 0 && i != 1 && i != 3 && i != 7) {

bits[i] = value % 2;

value /= 2;

}

}

// Set parity bits

bits[0] = bits[2] ^ bits[4] ^ bits[6] ^ bits[8] ^ bits[10]; // ^ is XOR in Java

bits[1] = bits[2] ^ bits[5] ^ bits[6] ^ bits[9] ^ bits[10];

bits[3] = bits[4] ^ bits[5] ^ bits[6] ^ bits[11];

bits[7] = bits[8] ^ bits[9] ^ bits[10] ^ bits[11];

// compute integer code

code = 0;

for (int i = 11; i >= 0; i--) {

code *= 2;

code += bits[i];

}

}

private void decode() {

int error = 0;

int value = code;

// Set the bit array

for (int i = 0; i < 12; i++) {

bits[i] = value % 2;

value /= 2;

}

// Check for transmission errors

if (bits[0] != (bits[2] ^ bits[4] ^ bits[6] ^ bits[8] ^ bits[10])) error += 1;

if (bits[1] != (bits[2] ^ bits[5] ^ bits[6] ^ bits[9] ^ bits[10])) error += 2;

if (bits[3] != (bits[4] ^ bits[5] ^ bits[6] ^ bits[11])) error += 4;

if (bits[7] != (bits[8] ^ bits[9] ^ bits[10] ^ bits[11])) error += 8;

// Correct Error

if (error != 0)

bits[error - 1] ^= 1;

// Extract character

letter = 0;

for (int i = 11; i >= 0; i--) {

if (i != 0 && i != 1 && i != 3 && i != 7) {

letter *= 2;

letter += bits[i];

}

}

// Display where error detected

if (error != 0)

System.out.println("Error in bit " + (error - 1) + " corrected in character " + letter);

}

public static void main(String[] args) throws FileNotFoundException

{

Scanner inFile = new Scanner( new File("hamming.txt"));

PrintStream outFile = new PrintStream(new File("output.txt"));

String line;

int code;

System.out.println("File hamming.txt opened");

while (inFile.hasNextInt(16)) {

code = inFile.nextInt(16);

// Decode the Hex code to get a character

// Create a Hamming object

Hamming ham = new Hamming(code);

// Display the decoded character

outFile.print(ham.getLetter());

}

inFile.close();

System.out.println("File output.txt closed");

}

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!