Пишет, что использую бесконечный цикл, тестирование на данных, которые в виде литералов есть в программе прошло успешно.
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) {
for(int i = 0; i < binaryNumber.length(); ++i)
{
if(binaryNumber.charAt(i) == '1' || binaryNumber.charAt(i) == '0')
{
continue;
}
else
{
return "";
}
}
int counter = 0;
int sum;
String res = "";
int power;
while(counter < binaryNumber.length())
{
sum = 0;
power = 3;
for(int i = counter; i < counter + 4; ++i)
{
if(binaryNumber.charAt(i) == '1')
{
sum += Math.pow(2, power);
}
power--;
}
res += HEX.charAt(sum);
counter += 4;
}
return res;
}
public static String toBinary(String hexNumber) {
for(int i = 0; i < hexNumber.length(); ++i)
{
if((hexNumber.charAt(i) >= '0' && hexNumber.charAt(i) <= '9') || (hexNumber.charAt(i) >= 'a' && hexNumber.charAt(i) <= 'f'))
{
continue;
}
else
{
return "";
}
}
String res = "";
StringBuilder sb = new StringBuilder(res);
int tmp = 0;
String ans = "";
for(int i = 0; i < hexNumber.length(); ++i)
{
for(int j = 0; j < HEX.length(); ++j)
{
if(hexNumber.charAt(i) == HEX.charAt(j))
{
tmp = j;
while(tmp != 0)
{
res += tmp % 2;
tmp /= 2;
}
if(j == 0)
{
res += "0000";
}
sb.append(res);
sb.reverse();
ans += sb.toString();
sb.delete(0, 5);
res = "";
}
}
}
return ans;
}
}