Слепил код, который работает. Не без помощи гугла, конечно, по колхозному, но в правильное решение не лез.
В итоге код рабочий, компаилируется, двоичную систему в шестнадцатиричную переводит правильно и наоборот, однако при этом валидатор говорит, что метод toHex не реализован согласно условию. Реализация метода toBinary его устраивает.
Не понимаю в чем загвоздка. Что нужно поправить в toHex?
package com.javarush.task.pro.task09.task0908;
import javax.print.DocFlavor;
import java.util.Arrays;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
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) {
//напишите тут ваш код
if (binaryNumber == null || binaryNumber.equals("") || !binaryNumber.matches("[0-1]+")) {
return "";
}
else {
if (binaryNumber.length() % 4 != 0) {
StringBuilder s1 = new StringBuilder(binaryNumber);
s1.reverse();
do s1.append("0");
while (s1.length() % 4 == 0);
s1.reverse();
binaryNumber = s1.toString();
}
String[] parts = binaryNumber.split("(?<=\\G.{4})");
for (int i = 0; i < parts.length; i++) {
if (parts[i].equals("0000")) {parts[i] = "0";}
if (parts[i].equals("0001")) {parts[i] = "1";}
if (parts[i].equals("0010")) {parts[i] = "2";}
if (parts[i].equals("0011")) {parts[i] = "3";}
if (parts[i].equals("0100")) {parts[i] = "4";}
if (parts[i].equals("0101")) {parts[i] = "5";}
if (parts[i].equals("0110")) {parts[i] = "6";}
if (parts[i].equals("0111")) {parts[i] = "7";}
if (parts[i].equals("1000")) {parts[i] = "8";}
if (parts[i].equals("1001")) {parts[i] = "9";}
if (parts[i].equals("1010")) {parts[i] = "a";}
if (parts[i].equals("1011")) {parts[i] = "b";}
if (parts[i].equals("1100")) {parts[i] = "c";}
if (parts[i].equals("1101")) {parts[i] = "d";}
if (parts[i].equals("1110")) {parts[i] = "e";}
if (parts[i].equals("1111")) {parts[i] = "f";}
}
StringBuilder s2 = new StringBuilder();
for (int i = 0; i < parts.length; i++) {
s2.append(parts[i]);
}
return s2.toString();
}
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
if (hexNumber == null || hexNumber.equals("") || !hexNumber.matches("[0-9, a-f]+")) {
return "";
}
else {
String[] parts = new String[hexNumber.length()];
StringBuilder s = new StringBuilder(hexNumber);
for (int i = 0; i < parts.length; i++) {
if (s.charAt(i) == '0') {parts[i] = "0000";}
if (s.charAt(i) == '1') {parts[i] = "0001";}
if (s.charAt(i) == '2') {parts[i] = "0010";}
if (s.charAt(i) == '3') {parts[i] = "0011";}
if (s.charAt(i) == '4') {parts[i] = "0100";}
if (s.charAt(i) == '5') {parts[i] = "0101";}
if (s.charAt(i) == '6') {parts[i] = "0110";}
if (s.charAt(i) == '7') {parts[i] = "0111";}
if (s.charAt(i) == '8') {parts[i] = "1000";}
if (s.charAt(i) == '9') {parts[i] = "1001";}
if (s.charAt(i) == 'a') {parts[i] = "1010";}
if (s.charAt(i) == 'b') {parts[i] = "1011";}
if (s.charAt(i) == 'c') {parts[i] = "1100";}
if (s.charAt(i) == 'd') {parts[i] = "1101";}
if (s.charAt(i) == 'e') {parts[i] = "1110";}
if (s.charAt(i) == 'f') {parts[i] = "1111";}
}
StringBuilder s2 = new StringBuilder();
for (int i = 0; i < parts.length; i++) {
s2.append(parts[i]);
}
return s2.toString();
}
}
}