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
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started