Может быть есть условие при котором моя программа может работать неправильно? Проверял на разных входных данных. Ответ всегда верный. Что не так с моим решением и как его можно улучшить?
package ua.javarush.task.pro.task09.task0908;
import java.util.Arrays;
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 hexNumber = "";
if (binaryNumber == null) {//проверка на то, пустая ли строка
return hexNumber;
}
for (int i = 0; binaryNumber.length() % 4 != 0; i++) {//проверка на то кратная ли длина строки 4 & добавление нужного количества нулей
binaryNumber = binaryNumber + "0";
}
char binaryNumberArray[] = binaryNumber.toCharArray(); //создаю массив чаров из строки, чтобы проверить каждый элемент строки на то есть ли там что-то кроме 0 или 1
for (int i = 0; i < binaryNumberArray.length; i++) {
if (binaryNumberArray[i] == '0' || binaryNumberArray[i] == '1') {
} else {
return hexNumber;//возвращаю пустую строку если вдруг там что-то кроме 0 и 1
}
}
String generalBinaryArray[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
char hexArray[] = HEX.toCharArray(); //создал два массива в котором номерной порядок массива соответсвует информации указаном в массиве. т.е. 0001 равно [1] или e = [14]
for (int i = 0; i < binaryNumber.length() / 4; i++) {//делю массив на 4, создаю цикл
String partOfBinaryNumber = binaryNumber.substring(i * 4, (i * 4) + 4);//беру по 4 элемента из строки
int vaultNumber = Arrays.binarySearch(generalBinaryArray, partOfBinaryNumber);//нахожу эти 4 элемента в generalBinaryArray, перевожу это в примитив int
hexNumber += hexArray[Math.abs(vaultNumber)];//ну и собственно собираю сам hexNumber
}
return hexNumber;
}
public static String toBinary(String hexNumber) {
String binaryNumber = "";
if (hexNumber == null) {
return binaryNumber;
}
char[] hexNumberArray = hexNumber.toCharArray();
final char[] generalHexNumberArray = HEX.toCharArray();
for (int i = 0; i < hexNumber.length(); i++) {
int check = Arrays.binarySearch(generalHexNumberArray, hexNumberArray[i]);
if (check < 0) {
return binaryNumber;
}
}
for (int i = 0; i < hexNumberArray.length; i++) {
final String generalBinaryArray[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
int vaultNumber = Arrays.binarySearch(generalHexNumberArray, hexNumberArray[i]);
binaryNumber += generalBinaryArray[vaultNumber];
}
return binaryNumber;
}
}