Не пойму, что не так... в методе toBinary подставляю разные входные значения hexNumber, все работает корректно, что же им не нравится.. Посмотрите, пожалуйста, свежим взглядом, а то уже долго мучаю задачу, может что очевидное не вижу
package en.javarush.task.pro.task09.task0908;
/*
Binary to hexadecimal converter
*/
import java.util.Arrays;
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Binary number " + binaryNumber + " is equal to hexadecimal number " + toHex(binaryNumber));
String hexNumber = "d2f";
System.out.println("Hexadecimal number " + hexNumber + " is equal to binary number " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
// Проверка входного параметра. Входной параметр должен быть кратным 4
if (binaryNumber == "" || binaryNumber == null)
return "";
else {
while (binaryNumber.length() % 4 != 0) {
binaryNumber = "0" + binaryNumber;
}
// преобраование строки в массив символов
char[] binaryNumberArray = binaryNumber.toCharArray();
String hexNumber = "";
// делаем выборку из четырех символов
for (int i = 0; i < binaryNumberArray.length / 4; i++) {
int decimalNumber = 0;
char[] binarySmall = Arrays.copyOfRange(binaryNumberArray, i * 4, i * 4 + 4);
for (int j = 0; j < binarySmall.length; j++) {
String x = binarySmall[j] + "";
int res = Integer.parseInt(x);
decimalNumber = decimalNumber + (int) (res * Math.pow(2, binarySmall.length - 1 - j));
}
char hex = HEX.charAt(decimalNumber);
String hexstr = hex + "";
hexNumber = hexNumber + hexstr;
}
return hexNumber;
}
}
public static String toBinary(String hexNumber) {
if (hexNumber == "" || hexNumber == null)
return "";
else {
char[] hexNumberArray = hexNumber.toCharArray();
String binaryNumber = "";
for (int i = 0; i < hexNumberArray.length; i++) {
String hexNumberStr = hexNumberArray[i] + "";
int decimalNumber = HEX.indexOf(hexNumberStr);
for (int j = 0; j < 4; j++) {
if (decimalNumber >= Math.pow(2, 3 - j)) {
binaryNumber = binaryNumber + "1";
decimalNumber = (int) (decimalNumber - Math.pow(2, 3 - j));
} else
binaryNumber = binaryNumber + "0";
}
}
return binaryNumber;
}
}
}