Всем привет! 2 часа ломал голову над задачей.
Не могу понять, что я делаю не так, ответ соответствует требованиям(вроде)
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 hexNumber="";
if (binaryNumber == null || binaryNumber.isEmpty() || !Pattern.matches("[0-1]", binaryNumber))
return hexNumber;
if (binaryNumber.length()%4 != 0){
int a = 4-(binaryNumber.length()%4);
for (int i = 0; i<a; i++ )
binaryNumber = "0" + binaryNumber;
}
for (int i = 0; i < binaryNumber.length(); i +=4 ) {
int bit4=0;
for (int j = i; j < i+4; j++) {
int index = binaryNumber.length()-1-j;
int value = Character.getNumericValue(binaryNumber.charAt(index));
bit4 += value*Math.pow(2, j-i);
}
char c = HEX.charAt(bit4);
hexNumber = c+hexNumber;
}
return hexNumber;
}
public static String toBinary(String hexNumber) {
String binaryNumber = "";
if (hexNumber == null || hexNumber.isEmpty() || !Pattern.matches("[0-9a-f]", hexNumber))
return binaryNumber;
for (int i = hexNumber.length()-1; i >=0; i--) {
int decNumber = HEX.indexOf(hexNumber.charAt(i));
for (int j = 0; j < 4; j++) {
binaryNumber = (decNumber%2)+binaryNumber;
decNumber /=2;
}
/* while (decNumber != 0) {
binaryNumber = (decNumber%2) +binaryNumber;
decNumber /=2;*/
// if (decNumber == 0){
//binaryNumber = (decNumber%2) +binaryNumber;
//break;
// }
}
return binaryNumber;
}
}