Код рабочий, но валидатор не принимает метод toBinary.
Предположил, что проверку выполнил не совсем как написано в условии (если входящий параметр — пустая строка или null, то оба метода возвращают пустую строку. Если входящий параметр метода toBinary(String) содержит любой символ, кроме цифр от 0 до 9 или латинскую букву от a до f (в нижнем регистре), то метод возвращает пустую строку.), но в таких случаях валидатор конкретно указывает, что проверка не выполняется. Скорее всего просто код настолько корявый, что не принимается валидатором).
Буду рад любым комментариям, советам, предположениям!
Буду рад любым комментариям, советам, предположениям!package com.javarush.task.pro.task09.task0908;
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("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
//напишите тут ваш код
String hex = "";
int decimalNumberInt = 0;
String[] fourNumberArray;
if (binaryNumber == hex || binaryNumber == null) {
return hex;
}
for (int i = 0; i < binaryNumber.length(); i++) {
if (binaryNumber.charAt(i) != '0' & binaryNumber.charAt(i) != '1') return "";
}
binaryNumber = addZeroToRemainderOfTheDivivsionByFourIsZero(binaryNumber);
fourNumberArray = fourNumberArray(binaryNumber);
for (int i = 0; i < fourNumberArray.length; i++) {
for (int j = 0; j < fourNumberArray[i].length(); j++) {
decimalNumberInt = decimalNumberInt + Character.getNumericValue((fourNumberArray[i].charAt(fourNumberArray[i].length() - j - 1))) * ((int) (Math.pow(2, j)));
}
hex = hex + HEX.charAt(decimalNumberInt);
decimalNumberInt = 0;
}
return hex;
}
public static String addZeroToRemainderOfTheDivivsionByFourIsZero(String binaryNumber) {
while (binaryNumber.length() % 4 != 0) {
binaryNumber = "0" + binaryNumber;
}
return binaryNumber;
}
public static String[] fourNumberArray(String binaryNumberString) {
String[] fourNumberArray = new String[binaryNumberString.length() / 4];
Arrays.fill(fourNumberArray, "");
for (int i = 0, j = 0; i < binaryNumberString.length(); i++) {
fourNumberArray[j] = fourNumberArray[j] + Character.getNumericValue((binaryNumberString.charAt(i)));
if (fourNumberArray[j].length() % 4 == 0) j++;
}
return fourNumberArray;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
String binaryNumber = "";
String binaryNumberResult = "";
int decimalNumber = 0;
if (toBinaryCheck(hexNumber)) return ""; /*проверка, что входящая строка не пустая строка
и не null, а так же содержит цифры от 0 до 9 и латинские буквы от a до f*/
for (int i = 0; i < hexNumber.length(); i++) {
decimalNumber = HEX.indexOf(hexNumber.charAt(i));
if (decimalNumber == 0) binaryNumberResult += "0000";
else {
while (decimalNumber != 0) {
binaryNumber = decimalNumber % 2 + binaryNumber;
decimalNumber = decimalNumber / 2;
}
binaryNumberResult += binaryNumber;
binaryNumber = "";
}
}
return binaryNumberResult;
}
public static boolean toBinaryCheck(String hexNumber) {
boolean check = false;
if (hexNumber == "" || hexNumber == null) return check = true;
for (int i = 0; i < hexNumber.length(); i++) {
for (int j = 0; j < HEX.length(); j++) {
if (hexNumber.charAt(i) == HEX.charAt(j)) {
check = false;
break;
} else check = true;
}
if (check) break;
}
return check;
}
}