Всем добрый день
Очень хочется понять какое именно условие не выполняется, причем в обоих методах
Беру тестовые значения - все вроде работает корректно
Пустая строка - отрабатывается
Неприемлемые символы - тоже
число переводится
Где же косяк?!
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) {
//напишите тут ваш код
String [][] arrayOfHEXSymbol = { {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"},
{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}
};
String hex = "";
//Если входящий параметр — пустая строка или null, то оба метода возвращают пустую строку.
if (binaryNumber==null || binaryNumber.equals("")) return "";
for (int i = 0; i < binaryNumber.length(); i++) {
//Если входящий параметр метода toHex(String) содержит любой символ, кроме 0 или 1, то метод возвращает пустую строку.
if (!(binaryNumber.charAt(i)=='1' || binaryNumber.charAt(i)=='0')) return "";
}
//делаем копию тк возможно нужно будет добавлять 0 в начало строки
String localBinaryNumber;
if (binaryNumber.length()%4>0){
localBinaryNumber = new String("000"+binaryNumber);
localBinaryNumber = localBinaryNumber.substring(localBinaryNumber.length()%4, localBinaryNumber.length());
}else localBinaryNumber=binaryNumber;
int countOfHexSymbol = (int)Math.ceil(1.0*localBinaryNumber.length()/4);
int strLen = localBinaryNumber.length();
for (int i = 0; i < countOfHexSymbol; i++) {
String strOfHEXSymbol = localBinaryNumber.substring(strLen-(i+1)*4, strLen-i*4);
for (int j = 0; j < 15; j++) {
if (strOfHEXSymbol.equals(arrayOfHEXSymbol[0][j]))
{
hex = arrayOfHEXSymbol[1][j] + hex;
break;
}
}
}
return hex;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
String [][] arrayOfHEXSymbol = { {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"},
{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}
};
String admissibleSymbols = "0123456789abcdef";
String binary = "";
//Если входящий параметр — пустая строка или null, то оба метода возвращают пустую строку.
if (hexNumber==null || hexNumber.equals("")) return "";
for (int i = 0; i < hexNumber.length(); i++) {
//Если входящий параметр метода toBinary(String) содержит любой символ, кроме цифр от 0 до 9 или латинскую букву от a до f (в нижнем регистре), то метод возвращает пустую строку.
if (!admissibleSymbols.contains(hexNumber.substring(i,i+1))) return "";
for (int j = 0; j < 15; j++) {
if (hexNumber.substring(i,i+1).equals(arrayOfHEXSymbol[1][j])) binary = binary + arrayOfHEXSymbol[0][j];
}
}
return binary;
}
}