Здравствуйте. Возникла проблема в ходе решения задачи "Двоично-шестнадцатеричный конвертер".
Дело в том, что я её решил, способ решения отличается от предложенного курсом.
Но:
1) валидатор ругает меня по всем пунктам и я не могу согласиться с этим.
2) тестил задачу вдоль и поперёк, выполнятся все условия.
Пожалуйста, помогите. Посмотрите решение, покажите почему не принимает валидатор, какие именно условия не выполнены.
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static final String[] arrayHex = new String[]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e"};
public static final String[] arrayBinary = new String[] {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
public static void main(String[] args) {
String binaryNumber = "100111010000"; // 100111010000
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0"; // 9d0
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
//напишите тут ваш код
if ((binaryNumber == null) || (binaryNumber.length() < 1)){ //проверка на наличие символов в строке
return "";
}
else{
boolean isBinary = binaryNumber.matches("^[0-1]+$"); // проверяем наличие исключительно "0" и "1"
if (!isBinary){
return "";
}
else {
while (binaryNumber.length() % 4 != 0){ // добавляем "0" в начало двоичного числа,
binaryNumber = "0" + binaryNumber; // если количество символов не кратно "4".
}
String hexNumber = "";
// String[] arrayHex = new String[]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e"};
// String[] arrayBinary = new String[] {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
for (int n = 0; (n < binaryNumber.length()); n += 4){ // цикл для обработки каждых четырёх цифр двоичного числа
String s = binaryNumber.substring(0+n, 4+n);
for (int i = 0; i < arrayBinary.length; i++) // цикл поиска соответствия
if (s.equals(arrayBinary[i])){
hexNumber = hexNumber + arrayHex[i]; // в случае совпадения содержимого строк, записываем значение, цикл прерываем.
break;
}
}
return hexNumber; // возвращаем полученный результат
}
}
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
if ((hexNumber == null) || (hexNumber.length() < 1)) {
return "";
}
else{
boolean isBinary = hexNumber.matches("^[0-9a-f]+$"); // 0 -9 и a - f
if (!isBinary){
return "";
}
else {
String binaryNumber = "";
for (int n = 0; n < hexNumber.length(); n++){
String s = hexNumber.substring(0+n, 1+n);
for (int i = 0; i < arrayHex.length; i++)
if (s.equals(arrayHex[i])){
binaryNumber = binaryNumber + arrayBinary[i];
break;
}
}
return binaryNumber;
}
}
}
}