Вроде протестировал несколько раз на разных значениях, требования соблюдены. Но валидатор матерится.
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
String HexNum = "";
if (binaryNumber == null)
return HexNum;
else {
if (binaryNumber.length()%4 != 0) {
int zero = binaryNumber.length()%4;
for (int i = 0; i < (4-zero); i++)
binaryNumber = 0 + binaryNumber;
}
for (int i = 0; i < binaryNumber.length(); i = i + 4) {
char[] f4 = new char[4];
binaryNumber.getChars(i, i + 4, f4, 0);
int a = (f4[0]-'0')*8+(f4[1]-'0')*4+(f4[2]-'0')*2+(f4[0]-'0');
HexNum = HexNum + HEX.charAt(a);
}
return HexNum;
}
}
public static String toBinary(String hexNumber) {
String BinNum = "";
if (hexNumber == null)
return null;
else {
for (int i = 0; i < hexNumber.length(); i++) {
int a = HEX.indexOf(hexNumber.charAt(i));
BinNum = BinNum + a/8 + (a%8)/4 + (a%4)/2 + a%2;
}
return BinNum;
}
}
}