Доброго времени суток! Подскажите пожалуйста, почему валидатор не пропускает решение? (Нужно, чтобы метод toBinary(String) был реализован согласно условию.) Ошибок нет, только эта проверка на проходит. Функция toHex(String binaryNumber) решена аналогично и там проблем нет.
package com.javarush.task.pro.task09.task0908;
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 == "" || binaryNumber == null) {return "";}
//+ проверка 0,1
int maxIndex = binaryNumber.length();
char ch;
String BIN = "01";
boolean err = false;
int i;
for (i = 0; i < maxIndex; i++) {
ch = binaryNumber.charAt(i);
if (BIN.indexOf(ch) == -1) {
err = true;
break;
}
}
if (err) {
return "";
}
//- проверка 0,1
//преобразуем строку до 16-тиричной
int remLength = maxIndex%4;
for (i = 0; i < remLength; i++) {
binaryNumber = "0" + binaryNumber;
}
//а теперь выполнем преобразование
String hexNumber = decToHex( binToDecimal(binaryNumber) );
return hexNumber;
}
public static String toBinary(String hexNumber) {
//проверка на пустую строку
if (hexNumber == "" || hexNumber == null) {return "";}
//+ проверка что символы только из HEX (определен в шапке класса)
int maxIndex = hexNumber.length();
char ch;
String HEX = "0123456789abcdef";
boolean err = false;
for (int i = 0; i < maxIndex; i++) {
ch = hexNumber.charAt(i);
if (HEX.indexOf(ch) == -1) {
err = true;
break;
}
}
if (err) {
return "";
}
//- проверка HEX
//а теперь выполнем преобразование (методы скопированы из предыдущих задач)
String binaryNumber = decToBinary( hexToDecimal(hexNumber) );
return binaryNumber;
}
// перенесли уже готовые процедуры из предыдущих задач
public static String decToBinary(int decimalNumber) {
String binaryNumber = "";
while (decimalNumber != 0) {
binaryNumber = (int)decimalNumber%2 + binaryNumber;
//уменьшим разрядность, чтобы обработать следующий разряд
decimalNumber = decimalNumber/2;
}
return binaryNumber;
}
public static int binToDecimal(String binaryNumber) {
int decimalNumber = 0;
int maxIndex = binaryNumber.length();
char ch;
int chInt;
for (int i = 0; i < maxIndex; i++) {
//сначала получим i-й символ из строки
ch = binaryNumber.charAt(maxIndex - i - 1);
if (ch == '1') {chInt = 1;}
else {chInt = 0;}
decimalNumber = decimalNumber + chInt * (int)Math.pow(2, i);
}
return decimalNumber;
}
public static String decToHex(int decimalNumber) {
if (decimalNumber == 0) {
return "0";
}
String hexNumber = "";
String HEX = "0123456789abcdef";
char ch;
while (decimalNumber != 0) {
int index = (int)decimalNumber%16;
ch = HEX.charAt(index);
hexNumber = ch + hexNumber;
//уменьшим разрядность, чтобы обработать следующий разряд
decimalNumber = decimalNumber/16;
}
return hexNumber;
}
public static int hexToDecimal(String hexNumber) {
int decimalNumber = 0;
int maxIndex = hexNumber.length();
char ch;
int index;
String HEX = "0123456789abcdef";
for (int i = 0; i < maxIndex; i++) {
//сначала получим i-й символ из строки
ch = hexNumber.charAt(maxIndex - i - 1);
index = HEX.indexOf(ch);
decimalNumber = decimalNumber + index * (int)Math.pow(16, i);
}
return decimalNumber;
}
}