1+ //Hamming Code
2+ import java .util .*;
3+
4+ class sjs7007_Hamming_Code
5+ {
6+ public static void main (String [] args )
7+ {
8+ Scanner ip = new Scanner (System .in );
9+ System .out .print ("Enter Message : " );
10+ String msg = ip .next ();
11+ int r =0 ,m =msg .length ();
12+ //calculate number of parity bits needed using m+r+1<=2^r
13+ while (true )
14+ {
15+ if (m +r +1 <=Math .pow (2 ,r ))
16+ {
17+ break ;
18+ }
19+ r ++;
20+ }
21+ System .out .println ("Number of parity bits needed : " +r );
22+ int transLength = msg .length ()+r ,temp =0 ,temp2 =0 ,j =0 ;
23+ int transMsg []=new int [transLength +1 ]; //+1 because starts with 1
24+ for (int i =1 ;i <=transLength ;i ++)
25+ {
26+ temp2 =(int )Math .pow (2 ,temp );
27+ if (i %temp2 !=0 )
28+ {
29+ transMsg [i ]=Integer .parseInt (Character .toString (msg .charAt (j )));
30+ j ++;
31+ }
32+ else
33+ {
34+ temp ++;
35+ }
36+ }
37+ for (int i =1 ;i <=transLength ;i ++)
38+ {
39+ System .out .print (transMsg [i ]);
40+ }
41+ System .out .println ();
42+
43+ for (int i =0 ;i <r ;i ++)
44+ {
45+ int smallStep =(int )Math .pow (2 ,i );
46+ int bigStep =smallStep *2 ;
47+ int start =smallStep ,checkPos =start ;
48+ System .out .println ("Calculating Parity bit for Position : " +smallStep );
49+ System .out .print ("Bits to be checked : " );
50+ while (true )
51+ {
52+ for (int k =start ;k <=start +smallStep -1 ;k ++)
53+ {
54+ checkPos =k ;
55+ System .out .print (checkPos +" " );
56+ if (k >transLength )
57+ {
58+ break ;
59+ }
60+ transMsg [smallStep ]^=transMsg [checkPos ];
61+ }
62+ if (checkPos >transLength )
63+ {
64+ break ;
65+ }
66+ else
67+ {
68+ start =start +bigStep ;
69+ }
70+ }
71+ System .out .println ();
72+ }
73+ //Display encoded message
74+ System .out .print ("Hamming Encoded Message : " );
75+ for (int i =1 ;i <=transLength ;i ++)
76+ {
77+ System .out .print (transMsg [i ]);
78+ }
79+ System .out .println ();
80+ }
81+ }
82+
83+ /* Output
84+
85+ Enter Message : 1001
86+ Number of parity bits needed : 3
87+ 0010001
88+ Calculating Parity bit for Position : 1
89+ Bits to be checked : 1 3 5 7 9
90+ Calculating Parity bit for Position : 2
91+ Bits to be checked : 2 3 6 7 10
92+ Calculating Parity bit for Position : 4
93+ Bits to be checked : 4 5 6 7 12
94+ Hamming Encoded Message : 0011001
95+
96+ */
0 commit comments