Коллеги , наставники. Всем доброго времени суток.
Посмотрите пожалуйста мой код. Все работает как часы . Все переводится как нужно, но почему то не проходит валидацию.
Возможно уже глаза замылились.
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.equals(""))
return "";
else if (!binaryNumber.matches("[0-1]+"))
return "";
String zero = "0";
while (binaryNumber.length() % 4 != 0) {
binaryNumber=binaryNumber + zero;
}
int sixtinth = 0;
String res = "";
int array_length = binaryNumber.length() / 4;
String[] a = new String[array_length];
int end = 4;
int start =0;
for (int b = 0; b < array_length; b++) {
a[b] = binaryNumber.substring(start, end);
start += 4;
end += 4;
}
for (int c = 0; c<a.length; c++) {
sixtinth=(Character.getNumericValue(a[c].charAt(3))) +
(Character.getNumericValue(a[c].charAt(2)) * 2) +
(Character.getNumericValue(a[c].charAt(1)) * 4) +
(Character.getNumericValue(a[c].charAt(0)) * 8);
if(sixtinth < 10)
res+=sixtinth;
else if(sixtinth == 10)
res+="a";
else if(sixtinth == 11)
res+="b";
else if(sixtinth == 12)
res+="c";
else if(sixtinth == 13)
res+="d";
else if(sixtinth == 14)
res+="e";
else if(sixtinth == 15)
res+="f";
}
return res;
}
public static String toBinary (String hexNumber){
String HEX = "0123456789abcdef";
int tenth = 0;
String resTenth = "";
if (hexNumber==null||hexNumber.equals(""))
return "";
if (!hexNumber.matches("[0-9_a-f]+"))
return "";
for (int i = 0; i<hexNumber.length(); i++)
{
tenth = tenth*16 + HEX.indexOf(hexNumber.charAt(i));
}
String binaryComplit = "";
while (tenth!=0)
{
binaryComplit = (tenth%2)+binaryComplit;
tenth = tenth/2;
}
return binaryComplit;
}
}
Конвертер работает правильно. Ввел двоично число 10 как входные данные, переводит правильно , 8 в шестнадцатеричной системе.
Спасибо.