Шестнадцатеричный конвертер

  • 10
  • Недоступна
Публичный статический метод toHex(int) должен переводить целое число, полученное в качестве входящего параметра, из десятичной системы счисления в шестнадцатеричную и возвращать его строковое представление. А публичный статический метод toDecimal(String) наоборот - из строкового представления шестна
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (24)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Oluna
Уровень 13, Berlin, Германия
5 января, 13:58
Ну здравствуй 2022, я вернулась :) Всё решила, всё ок. И еще разочек решила ту же задачу (для себя) более правильно, с использованием StringBuilder, ведь конкатинировать String внутри цикла - это code smells, дурная практика то есть, ибо создаются промежуточные объекты каждый раз, и если строка будет действительно длинной, то это замедлит производительность. Понравилось обращать внимание на подсказки SonarLint (аддона к IntelliJ) и использвать приличные решения.
Александр Огарков
Уровень 28, Мытищи, Россия
26 декабря 2021, 18:11
Для перевода в десятичное мне запомнился простой алгоритм шестнадцатеричное число += (представление шестнадцатеричной цифры в десятичном виде, начиная справа) * 16 в степени i. Записать сложнее, но я могу понять как он работает, в отличие от алгоритма из задачи
JaVadim
Уровень 10, Королев, Russian Federation
14 декабря 2021, 08:07
Погуглил подходящие методы и, используя метод split("") расщепил HEX и hexNumber на два стринговых массива, и через цикл в цикле сравнивал значения в их ячейках. Сработало. Но можно было лучше погуглить)
AndreyCDO проектировщик в adn24.ru
24 ноября 2021, 13:31
Да уж... я, конечно решил, основываясь на том принципе, что и прошлую задачку решил, но это такой костыль, по сравнению с правильным решением... Но откуда нам знать такие методы как в правильно решении? Или это на самостоятельное изучение?
БелК в труселях
Уровень 31, Покровск, Ukraine
19 сентября 2021, 06:22
Доброе утро. Решил, но объясните почему так подходит если??? for(int i=0; i<hexNumber.length();i++) { //char d=hexNumber.charAt(i); int index1 = HEX.indexOf(hexNumber.charAt(i)); x=16*x+index1; } Если считать по идеи так 4e8 = Первый i=0 (4+16*0) Второй i=1(15+4*16) и Третий i=2(8+79*16)=1272 А программа считает так 4e8 = Первый i=0 (4+16*0) Второй i=1(14+4*16) и Третий i=2(8+78*16)=1256????????
Сергей
Уровень 50, Кандалакша, Россия
23 сентября 2021, 11:12
Второй i=1(15+4*16) - здесь ошибка, индекс символа 'e' равен 14
Masha Frolova учу java
30 сентября 2021, 21:36
4e8 = 8*16^0 + 14*16^1 + 4*16^2 = 8+224+1024 = 1256, все правильно
БелК в труселях
Уровень 31, Покровск, Ukraine
1 октября 2021, 18:41
Конечно правильно. Спасибо за математическое решение используя хор или "Логическое исключающее ИЛИ (XOR)". Люди которые у видели ошибку, которая ниже мной и объясняется. Я алгоритм не понял почему правильно считает, а не математику. ЕЩЕ РАЗ АЛГОРИТМ!!! Спасибо за ответы, но за все время мне не кто, повторяю НИКТО НЕ ОБЪЯСНИЛ почему алгоритм считает правильно! Даже палочки пример приводили из математики 8 класса. Наверное эту загадку нельзя разгадать!
Marinka Rostovskaya
Уровень 24, Ростов-на-Дону, Россия
13 августа 2021, 17:14
"индекс символа из строки HEX, равного символу из входящей строки с индексом i" не поняла смысл этой фразы
Сергей
Уровень 50, Кандалакша, Россия
23 сентября 2021, 11:20
private static final String HEX = "0123456789abcdef"
HEX - это строка, можно воспринимать как массив символов. Под индексом 0 находится символ '0', под индексом 15 - символ 'f', то есть значение индекса совпадает с числовым значением символа в 16-ричной системе.
Denis Malyshev
Уровень 20, Петрозаводск, Россия
6 августа 2021, 00:05
Кто понимает объясните, пожалуйста, почему это условие не проходит
if ( hexNumber.equals("") || hexNumber == null){
            return decimalNumber;
}
А вот это проходит??
if (hexNumber == null){
            return decimalNumber;
        }
Это типа одно и то же?
Александр
Уровень 11, Пермь, Россия
28 сентября 2021, 10:40
проблемы этого кода в том что если hexNumber все же null, то обращение к методу hexNumber.equals() вызовет исключение NullPointerException. Потому надо наоборот:
if (hexNumber == null || hexNumber.equals("")){
            return decimalNumber;
}
теперь если hexNumber null, то вот этой проверки не будет hexNumber.equals(""), так как используется ленивый оператор ||, ему достаточно срабатывания первого условия и остальные он не проверяет.
Сергей Коваленко
Уровень 29, Краснодар
20 ноября 2021, 07:45
либо так
if ( hexNumber.equals("") | hexNumber == null){
            return decimalNumber;
}
JaVadim
Уровень 10, Королев, Russian Federation
14 декабря 2021, 08:03
По моему, при таком варианте условия, наоборот - в любом случае будут произведены оба сравнения, и если hexNumber равен null, то опять же вылетит NullPointerException.
Oluna
Уровень 13, Berlin, Германия
5 января, 13:51
либо так (проходит)
if(hexNumber != null && !hexNumber.isEmpty()){
            return decimalNumber;
}
Alex
Уровень 32, Нижний Новгород, Россия
22 июня 2021, 20:56
Осторожно затягивает.🤓
Sergey Kornilov
Уровень 35, Petropavlovsk, Казахстан
14 июня 2021, 07:52
Всего эту задачу решили 1575 учеников. Алгоритм описан подробно в условии,читаем ВНИМАТЕЛЬНО и используем методы: String.charAt() String.indexOf() Для отладки дополняем код проверками, типа System.out.println(hexNumber.charAt(i)); System.out.println(HEX.indexOf(...);
Serg
Уровень 36, Санкт-Петербург
24 апреля 2021, 08:34
Основная проблема была в вытаскивании индекса со строки. Наученный горьким опытом с прошлой задачи основательно пришлось копаться в возможностях перевода строки в число и обратно и вытаскивание определенного символа или индекса со строки. Метод int indexOf(int ch) возвращает индекс в данной строке первого вхождения указанного символа. Статья на JavaRush char charAt(int index) возвращает значение char по указанному индексу. - Статья на Javarush