На данный момент, я пытаюсь справиться хотя бы с первой частью задачи — переводом из двоичной системы в шестнадцатиричную.
Столкнулся с тем, что компиляция кода банально не доходит до цикла for, в котором и происходит преобразование. ПОгуглил, поспрашивал на StackOverflow - оказалось дело в огромном количестве "return", предшествующих циклу. Однако, не понимаю как исправить код таким образом, чтобы это самое количество возвращений уменьшить. Объясните плиз, я на грани отчаяния (хоть и знаю, что дальше будет только хуже).
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 hexNumber = "";
if (binaryNumber == "" || binaryNumber == null)
{
return "";
} else if (binaryNumber.contains("[a-zA-Z]+") || binaryNumber.contains("[2-9]+"))
{
return "";
}
else
{
if (binaryNumber.length() % 4 != 0)
{
String bN2 = '0' + binaryNumber;
bN2 = binaryNumber;
return binaryNumber;
}
else
{
return binaryNumber;
}
}
//code is here
for (int i = 0; i < (binaryNumber.length()); i += 4)
{
switch (binaryNumber.substring(i, i + 4))
{
case ("0000"):
hexNumber = hexNumber + "0";
break;
case ("0001"):
hexNumber = hexNumber + "1";
break;
case ("0010"):
hexNumber = hexNumber + "2";
break;
case ("0011"):
hexNumber = hexNumber + "3";
break;
case ("0100"):
hexNumber = hexNumber + "4";
break;
case ("0101"):
hexNumber = hexNumber + "5";
break;
case ("0110"):
hexNumber = hexNumber + "6";
break;
case ("0111"):
hexNumber = hexNumber + "7";
break;
case ("1000"):
hexNumber = hexNumber + "8";
break;
case ("1001"):
hexNumber = hexNumber + "9";
break;
case ("1010"):
hexNumber = hexNumber + "a";
break;
case ("1011"):
hexNumber = hexNumber + "b";
break;
case ("1100"):
hexNumber = hexNumber + "c";
break;
case ("1101"):
hexNumber = hexNumber + "d";
break;
case ("1110"):
hexNumber = hexNumber + "e";
break;
case ("1111"):
hexNumber = hexNumber + "f";
break;
}
}
return hexNumber;
}
public static String toBinary(String hexNumber)
{
if (hexNumber == "" || hexNumber == null)
{
return "";
} else if (hexNumber.contains("[g-zA-Z]+"))
{
return "";
}
return null;
}
}