Помогите пожалуйста с методом который переводить из двоичного в шестнадцатеричную.
Anonymous #2859025
16 уровень
Помогите пожалуйста с методом который переводить из двоичного в шестнадцатеричную.
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас Пасинков Software Developer в Zipy Master
5 июля 2022, 08:26
а что с ним? неправильно переводит? или вообще не переводит никак?
как вы хотели чтобы он работал? какой алгоритм закладывали?
0
Anonymous #2859025
5 июля 2022, 08:41
Всё правильно переводит, проверил Валидатор не принимает.Не знаю почему
0
Стас Пасинков Software Developer в Zipy Master
5 июля 2022, 09:53
скиньте код текстом. со скриншота неудобно копировать к себе в идею чтоб запустить поганять на разных данных
но я вижу, что в 50й строке вам идея подсвечивает hex серым, значит результат этого деления нигде не используется, а значит ни на что не влияет. поэтому я думаю у вас проблема в логике где-то
на какие пункты валидатор жалуется?
вижу у вас проблему с тем, что число 101 скорее всего не переведется.
попробуйте еще число 10001 перевести, тоже вроде неправильно переведется, ведь вы не дополняете нулями, а просто берете первые 4 цифры
0
Anonymous #2859025
5 июля 2022, 10:25
public static String toHex(String binaryNumber) {//из двоичной системы счисления в шестнадцатеричную
//напишите тут ваш код
String HEX = "0123456789abcdef";
String str = "";
if (binaryNumber == null || binaryNumber.equals("") || !Pattern.matches("[0-10]+", binaryNumber)) {
return "";
} else {
String[] array = new String[binaryNumber.length() / 4];
for (int i = 0, j = 0, k = 4; j < binaryNumber.length() && k <= binaryNumber.length() && i < binaryNumber.length() / 4; k += 4, j += 4, i++) {
array[i] = binaryNumber.substring(j, k);//1111
}
for (int i = 0; i < array.length; i++) {
String inner = array[i];
int hex = 0;
for (int j = 0; j < inner.length(); j++) {
hex = (int) (hex + (inner.charAt(inner.length() - 1 - j) - '0') * Math.pow(2, j));
}
str = HEX.charAt(hex % 16) + str;
hex = hex / 16;
}
StringBuilder sb = new StringBuilder(str);
sb.reverse();
String fd = sb.toString();
return fd;
}
}
0
Anonymous #2859025
5 июля 2022, 10:30
Валидатор только не принимает метод toHex(String).
0
Стас Пасинков Software Developer в Zipy Master
5 июля 2022, 12:18
этот ваш метод не работает с числами:
0
1
10
11
100
101
110
111
ваш метод неправильно работает с числами:
10000
10001
10010
итд.
я вам в сообщении выше уже указал в каких местах кода у вас могут быть проблемы.
поправьте код, потестируйте на разных числах
0
Anonymous #2859025
6 июля 2022, 07:32
Спасибо, решил задачу
+1