Вроде все проверки проходит , но не принимает toBinary . Понятно что можно и лучше написать код , но подсмотрев ответ вообще ужаснулся .... нелепица из if , по сути это тот же самый map по ключу. Банальщина.
Но... где в общем ошибка у меня , очень нужна помощь
package com.javarush.task.pro.task09.task0908;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "10011010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "a30";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
int n = 0;
String num = "";
String hex = operatorsBoolean(binaryNumber);
if (!hex.equals("")) {
for (int i = 0; i < hex.length(); i = i + 4) {
String binaryNumber1 = hex.substring(i, i + 4);
n = toDecimal(binaryNumber1);
num = num + HEX.charAt(n);
}
hex = num;
}
return hex;
}
public static String toBinary(String hexNumber) {
String hex = "";
if (hexNumber == null) {
return hex;
}
if (hexNumber.matches("[0-9a-f]+") && !hexNumber.equals("")) {
hex = toDecimal2(hexNumber);
}
return hex;
}
//******************************************************************************
public static String toDecimal2(String hexNumber) {
int x=0;
String f = "";
for (int i = 0; i < hexNumber.length(); i++) {
x=x*16+HEX.indexOf(hexNumber.charAt(i));
}
while (x != 0) {
f = (x % 2) + f;
x = x / 2;
}
return f;
}
// метот проверящий что заданная переменная не пустая строка и null и добавляет нули если их не хватает
public static String operatorsBoolean(String binaryNumber) {
if (binaryNumber == null || binaryNumber.equals("")) {
binaryNumber = "";
} else {
if (binaryNumber.matches("[0-1]+")) {
while (binaryNumber.length() % 4 != 0) {
binaryNumber = 0 + binaryNumber;
}
} else {
binaryNumber = "";
}
}
return binaryNumber;
}
// высчитывает десятичное число из двоичного
public static int toDecimal(String binaryNumber) {
int decimalNumber = 0;
for (int i = 0; i < binaryNumber.length(); i++) {
int index = binaryNumber.length() - 1 - i;
int value = Character.getNumericValue(binaryNumber.charAt(index));
decimalNumber += value * Math.pow(2, i);
}
return decimalNumber;
}
//присваивает двоичному числу, шестнадцатиричный аналог
public static String toHex(int decimalNumber) {
String HEX = "0123456789abcdef";
String num = "";
while (decimalNumber != 0) {
num = HEX.charAt(decimalNumber % 16) + num;
decimalNumber = decimalNumber / 16;
}
return num;
}
}