Результат выводится верный. Валидатор говорит: Убедись, что метод toBinary(String) возвращает пустую строку, если входящий параметр содержит любой символ, кроме цифр от 0 до 9 или латинскую букву от a до f (в нижнем регистре).
Чем моя проверка на соответствие не нравится, не понимаю.
private static final String HEX = "0123456789abcdef";
for (int i = 0; i < hexNumber.length(); i++) {
if (Solution.HEX.indexOf(Character.toString(hexNumber.charAt(i))) < 0){
return decimal;
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
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 = "";
if (binaryNumber == null || binaryNumber.equals("")){
return hex;
}
for (int i = 0; i < binaryNumber.length(); i++){
if (binaryNumber.charAt(i) != '1' && binaryNumber.charAt(i) != '0'){
return hex;
}
}
binaryNumber = new StringBuilder(binaryNumber).reverse().toString();
if (binaryNumber.length() % 4 == 0){
binaryNumber = binaryNumber + "";
} else if (binaryNumber.length() % 4 == 3){
binaryNumber = binaryNumber + "0";
} else if (binaryNumber.length() % 4 == 2){
binaryNumber = binaryNumber + "00";
} else if (binaryNumber.length() % 4 == 1){
binaryNumber = binaryNumber + "000";
}
while (binaryNumber.length() != 0){
int w = 0;
for (int i = 0; i < 4; i++){
w = w + (int) (Integer.parseInt(Character.toString(binaryNumber.charAt(i))) * Math.pow((double) 2, i));
}
for (int i = 0; i < Solution.HEX.length(); i++){
if (w == i){
hex = hex + Character.toString(Solution.HEX.charAt(i));
}
}
if (binaryNumber.length() == 4){
hex = new StringBuilder(hex).reverse().toString();
return hex;
}
binaryNumber = binaryNumber.substring(4);
}
return hex;
}
public static String toBinary(String hexNumber) {
String decimal = "";
if (hexNumber == null || hexNumber.equals("")){
return decimal;
}
hexNumber = new StringBuilder(hexNumber).reverse().toString();
for (int i = 0; i < hexNumber.length(); i++) {
if (Solution.HEX.indexOf(Character.toString(hexNumber.charAt(i))) < 0){
return decimal;
} else if (Solution.HEX.indexOf(Character.toString(hexNumber.charAt(i))) >= 0){
int f = Solution.HEX.indexOf(Character.toString(hexNumber.charAt(i)));
while (f > 0){
decimal = decimal + Integer.toString(f % 2);
f = f / 2;
}
}
}
decimal = new StringBuilder(decimal).reverse().toString();
if (decimal.length() % 4 == 0 && decimal.length() / 4 != hexNumber.length()){
decimal = decimal + "0000";
} else if (decimal.length() % 4 == 3){
decimal = decimal + "000";
} else if (decimal.length() % 4 == 2){
decimal = decimal + "00";
} else if (decimal.length() % 4 == 1){
decimal = decimal + "0";
} else if (decimal.length() % 4 == 0){
return decimal;
}
return decimal;
}
}