По моему все писал правильно. Когда сам тестировал, работал нормально. Почему JavaRush методу toHex принимает как неправильно? Народ помогите пожалуйста :(
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 == null || binaryNumber.isEmpty()) {
return "";
}
while (binaryNumber.length() % 4 != 0) {
binaryNumber = "0" + binaryNumber;
}
String res = "";
char[] binaryArray = binaryNumber.toCharArray();
char[] array = "8421".toCharArray();
char[] hexArray = "abcdef".toCharArray();
for (int i = 0; i < binaryArray.length; i++) {
String ch = String.valueOf(binaryArray[i]);
if (!ch.equals("0") || !ch.equals("1")) {
return "";
}
}
for (int i = 0; i < binaryArray.length; i += 4) {
int sum = 0;
for (int j = 0; j < 4; j++) {
sum += Character.getNumericValue(array[j]) * Character.getNumericValue(binaryArray[i + j]);
}
if (sum >= 10) {
for (int j = 0; j < 6; j++) {
if (j + 10 == sum) {
res += hexArray[j];
}
}
} else {
res += sum;
}
}
return res;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
if (hexNumber == null || hexNumber.isEmpty() || !Pattern.matches("[0-9a-f]+", hexNumber)) {
return "";
}
String result = "";
char[] hexChar = hexNumber.toCharArray();
int[] numbers = new int[]{8, 4, 2, 1};
for (int i = 0; i < hexChar.length; i++) {
int numb = Character.getNumericValue(hexChar[i]);
char[] binary = "0000".toCharArray();
for (int j = 0; j < numbers.length; j++) {
if (numbers[j] <= numb) {
numb -= numbers[j];
binary[j] = '1';
}
}
result += new String(binary);
}
return result;
}
}