Доброго времени суток. Написал данную программу немного по своему, а не так, как было в подсказке. Метод toHex сначала переводит из двоичной системы в десятичную, а затем переводит из десятичной в шестнадцатеричную. Такой способ проходит проверку.
Метод toBinary из шестнадцатеричной переводит сначала в десятичную, а затем в двоичную. И это не проходит проверку. (?)
Код для обоих методов возвращает верные решения (проверял методом тыка, переводя из одной сс в другую).
Возможно у меня глаз замылился и я не вижу какого-то простого недочета, буду рад любым ответам, т.к. уже не знаю что делать.
package com.javarush.task.pro.task09.task0908;
/*
Двоично-шестнадцатеричный конвертер
*/
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) {
//напишите тут ваш код
int i = 0;
String num16 = "";
int decimalNumber = 0;
if (binaryNumber == "" || binaryNumber == null)
return "";
else {
String myBinaryNumber = binaryNumber;
for (int j = 0; j < binaryNumber.length(); j++) {
if (myBinaryNumber.endsWith("1")) {
decimalNumber = decimalNumber + (int) Math.pow(2, j);
myBinaryNumber = myBinaryNumber.substring(0, myBinaryNumber.length() - 1);
} else if (myBinaryNumber.endsWith("0")) {
myBinaryNumber = myBinaryNumber.substring(0, myBinaryNumber.length() - 1);
} else {
num16 = "";
break;
}
}
if (decimalNumber<=0)
return "";
else
{
String[] array = new String[HEX.length()];
String newHex = HEX;
for (int c = newHex.length(); c > 0 ; c--) {
array[c -1] = newHex.substring( newHex.length() - 1);
newHex =newHex.substring(0, newHex.length() - 1);
}
while (decimalNumber!=0)
{
i = decimalNumber % 16;
num16 = array[i] + num16;
decimalNumber = decimalNumber / 16;
}
}
return num16;
}
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
String num2 = "";
int decimalNumber = 0;
if (hexNumber == "" || hexNumber == null)
return "";
else {
String newHexNumber = hexNumber;
for (int i = 0; i < newHexNumber.length(); i++) {
String finStr = hexNumber.substring(hexNumber.length() - 1);
if (HEX.indexOf(finStr) == -1) {
return num2;
}
else {
int j = HEX.indexOf(finStr);
decimalNumber = decimalNumber + (j * (int) Math.pow(16, i));
hexNumber = hexNumber.substring(0, hexNumber.length() - 1);
}
}
if (decimalNumber <= 0)
return "";
else {
while (decimalNumber != 0) {
if (decimalNumber % 2 == 1)
num2 = "1" + num2;
else
num2 = "0" + num2;
decimalNumber = decimalNumber / 2;
}
return num2;
}
}
}
}