Skip to content

Commit fd24ffc

Browse files
committed
Fix requested changes
1 parent 724ff7e commit fd24ffc

File tree

2 files changed

+85
-19
lines changed

2 files changed

+85
-19
lines changed

src/main/java/com/conversions/HexadecimalToBinary.java

Lines changed: 74 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,92 @@ public class HexadecimalToBinary {
1111

1212
public String hexToBin (String hexStr) {
1313

14-
String binaryString = "", hexaNumbers = "0123456789ABCDEF";
15-
int indexOfHex, decimalNumber = 0, k = 1;
14+
String binaryString = "", hexaNumbers = "0123456789ABCDEF",
15+
DecimalStr ="", binaryStringBefore ="" , binaryStringAfter = "";
16+
int indexOfHex, decimalNumber = 0, k = 1, n =1, z=1, decimalNumberBefore = 0
17+
, decimalNumberAfter = 0;
1618
char letter;
17-
int binaryArray[] = new int [50];
19+
int binaryArray[] = new int [60];
20+
int binaryArrayBefore[] = new int [60];
21+
int binaryArrayAfter[] = new int [60];
1822

1923
hexStr = hexStr.toUpperCase();
20-
24+
int pointPosition = hexStr.indexOf(".");
2125
/**
2226
* Transform the hexadecimal number to decimal number
2327
*/
28+
if ( pointPosition == -1) {
2429
for ( int i = 0 ; i < hexStr.length(); i++) {
25-
letter = hexStr.charAt(i);
26-
indexOfHex = hexaNumbers.indexOf(letter);
27-
decimalNumber = 16 * decimalNumber + indexOfHex;
30+
letter = hexStr.charAt(i);
31+
indexOfHex = hexaNumbers.indexOf(letter);
32+
decimalNumber = 16 * decimalNumber + indexOfHex;
33+
}
2834
}
35+
else {
36+
for ( int i = 0 ; i < pointPosition ; i++) {
37+
letter = hexStr.charAt(i);
38+
indexOfHex = hexaNumbers.indexOf(letter);
39+
decimalNumberBefore = 16 * decimalNumberBefore + indexOfHex;
40+
}
41+
String decimalNumberBeforeStr = String.valueOf(decimalNumberBefore);
42+
43+
for ( int i = pointPosition+1 ; i < hexStr.length() ; i++) {
44+
letter = hexStr.charAt(i);
45+
indexOfHex = hexaNumbers.indexOf(letter);
46+
decimalNumberAfter = 16 * decimalNumberAfter + indexOfHex;
47+
}
48+
49+
String decimalNumberAfterStr = String.valueOf(decimalNumberAfter);
50+
51+
DecimalStr = decimalNumberBeforeStr + '.' + decimalNumberAfterStr;
52+
}
2953

54+
55+
56+
int pointPositionDec = DecimalStr.indexOf(".");
3057
/**
31-
* Transform decimal number to binary and put it in an array
58+
* Check whether the result contains a floating point or not
3259
*/
33-
while (decimalNumber != 0) {
34-
binaryArray[k++] = decimalNumber % 2;
35-
decimalNumber = decimalNumber / 2;
60+
if (pointPositionDec == -1) {
61+
while (decimalNumber != 0) {
62+
binaryArray[k++] = decimalNumber % 2;
63+
decimalNumber = decimalNumber / 2;
64+
}
65+
66+
}else {
67+
/**
68+
* If it contains floating points we need to divide it into two parts before the point and after it
69+
*/
70+
while (decimalNumberBefore != 0) {
71+
binaryArrayBefore[z++] = decimalNumberBefore % 2;
72+
decimalNumberBefore = decimalNumberBefore / 2;
73+
}
74+
while (decimalNumberAfter != 0) {
75+
binaryArrayAfter[n++] = decimalNumberAfter % 2;
76+
decimalNumberAfter = decimalNumberAfter / 2;
77+
}
78+
3679
}
37-
/**
38-
* Put the binary in a string
39-
*/
40-
for ( int j = k-1 ; j>0 ; j--) {
41-
binaryString = binaryString + binaryArray[j];
80+
81+
if(pointPositionDec == -1) {
82+
for ( int j = k-1 ; j>0 ; j--) {
83+
binaryString = binaryString + binaryArray[j];
84+
}
85+
}else {
86+
for ( int j = z-1 ; j>0 ; j--) {
87+
binaryStringBefore = binaryStringBefore + binaryArrayBefore[j];
88+
}
89+
90+
for ( int j = n-1 ; j>0 ; j--) {
91+
binaryStringAfter = binaryStringAfter + binaryArrayAfter[j];
92+
}
93+
/**
94+
* Remove the zeroes in the end of the hexadecimal
95+
*/
96+
binaryStringAfter = binaryStringAfter.replaceAll("0*$", "").replaceAll("\\.$", "");
97+
98+
99+
binaryString = binaryStringBefore + "." + binaryStringAfter;
42100
}
43101

44102
return binaryString;
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
package com.conversions;
22

3-
import static org.junit.jupiter.api.Assertions.*;
4-
53
import org.junit.jupiter.api.Assertions;
64
import org.junit.jupiter.api.Test;
75

86
class HexadecimalToBinaryTest {
97

108
@Test
119
void test() {
10+
//HexadecimaltTesting
1211
HexadecimalToBinary hexadecimalToBinary = new HexadecimalToBinary();
13-
Assertions.assertEquals("10101011", hexadecimalToBinary.hexToBin("AB"), "Incorrect Conversion");
12+
Assertions.assertEquals("1011110011101111", hexadecimalToBinary.hexToBin("BCEF"), "Incorrect Conversion");
1413
Assertions.assertEquals("10101101010101111001101", hexadecimalToBinary.hexToBin("56ABCD"), "Incorrect Conversion");
1514
Assertions.assertEquals("10011101111011010001001", hexadecimalToBinary.hexToBin("4ef689"), "Incorrect Conversion");
1615
Assertions.assertEquals("10011101111", hexadecimalToBinary.hexToBin("4EF"), "Incorrect Conversion");
1716
Assertions.assertEquals("101010111100110111101111", hexadecimalToBinary.hexToBin("ABCDEF"), "Incorrect Conversion");
1817
//It returns -1 if you enter a wrong hexaDecimal
1918
Assertions.assertEquals("-1", hexadecimalToBinary.hexToBin("K"), "Incorrect Conversion");
19+
20+
21+
//Hexadecimal with floating point testing
22+
Assertions.assertEquals("101010111100.101111", hexadecimalToBinary.hexToBin("ABC.BC"), "Incorrect Conversion");
23+
Assertions.assertEquals("10101101010.101111001101", hexadecimalToBinary.hexToBin("56A.BCD"), "Incorrect Conversion");
24+
Assertions.assertEquals("1001110.1111011010001001", hexadecimalToBinary.hexToBin("4e.f689"), "Incorrect Conversion");
25+
Assertions.assertEquals("1001110.1111", hexadecimalToBinary.hexToBin("4E.F"), "Incorrect Conversion");
26+
Assertions.assertEquals("10101011110011011110.1111", hexadecimalToBinary.hexToBin("ABCDE.F"), "Incorrect Conversion");
27+
2028
}
2129

2230
}

0 commit comments

Comments
 (0)