Очень понравился алгоритм решения через Map, но валидатор не принимает код.
Хотя при запуске с разными комбинациями бинарных чисел всё работает.
Проверила несколько раз условия задачи - вроде всё в порядке: проверка на пустые строки, обработка кратности 4.
Хэлп! Верю, что "незамыленным" взглядом будет лучше видно в чём проблема:)
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
import java.util.HashMap;
import java.util.Map;
/*
Двоично-шестнадцатеричный конвертер
*/
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("")) return "";
Map<String, Character> BIN_HEX = new HashMap<>();
BIN_HEX.put("0000", '0');
BIN_HEX.put("0001", '1');
BIN_HEX.put("0010", '2');
BIN_HEX.put("0011", '3');
BIN_HEX.put("0100", '4');
BIN_HEX.put("0101", '5');
BIN_HEX.put("0110", '6');
BIN_HEX.put("0111", '7');
BIN_HEX.put("1000", '8');
BIN_HEX.put("1001", '9');
BIN_HEX.put("1010", 'a');
BIN_HEX.put("1011", 'b');
BIN_HEX.put("1100", 'c');
BIN_HEX.put("1101", 'd');
BIN_HEX.put("1110", 'e');
BIN_HEX.put("1111", 'f');
String result = "";
int dlina = binaryNumber.length() % 4;
if(dlina == 1) {
binaryNumber = "000" + binaryNumber;
} else if (dlina == 2) {
binaryNumber = "00" + binaryNumber;
} else if (dlina == 3) {
binaryNumber = "0" + binaryNumber;
}
while (binaryNumber.length() != 0) {
String temp = binaryNumber.substring(binaryNumber.length() - 4);
result = BIN_HEX.get(temp) + result;
binaryNumber = binaryNumber.substring(0, binaryNumber.length() - 4);
}
return result;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
if (hexNumber == null || hexNumber.equals("")) return "";
Map<Character, String> HEX_BINARY = new HashMap<>();
HEX_BINARY.put('0', "0000");
HEX_BINARY.put('1', "0001");
HEX_BINARY.put('2', "0010");
HEX_BINARY.put('3', "0011");
HEX_BINARY.put('4', "0100");
HEX_BINARY.put('5', "0101");
HEX_BINARY.put('6', "0110");
HEX_BINARY.put('7', "0111");
HEX_BINARY.put('8', "1000");
HEX_BINARY.put('9', "1001");
HEX_BINARY.put('a', "1010");
HEX_BINARY.put('b', "1011");
HEX_BINARY.put('c', "1100");
HEX_BINARY.put('d', "1101");
HEX_BINARY.put('e', "1110");
HEX_BINARY.put('f', "1111");
String result = "";
char[] numberArray = hexNumber.toCharArray();
for (char n:numberArray){
result = result + HEX_BINARY.get(n);
}
return result;
}
}