Допоможіть, будь ласка, правильно скласти логіку для методів toHex() і toDecimal().
Ось код який у мене вийшов:
package ua.javarush.task.pro.task09.task0907;
/*
Шістнадцятковий конвертер
*/
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
int decimalNumber = 1256;
System.out.println("Десяткове число " + decimalNumber + " дорівнює шістнадцятковому числу " + toHex(decimalNumber));
String hexNumber = "4e8";
System.out.println("Шістнадцяткове число " + hexNumber + " дорівнює десятковому числу " + toDecimal(hexNumber));
}
public static String toHex(int decimalNumber) {
//напишіть тут ваш код
String hex = new String();
String strDecimalNumber = String.valueOf(decimalNumber);
if (decimalNumber <= 0) {
return null;
} else {
while (decimalNumber != 0) {
hex = String.valueOf(Character.digit(decimalNumber % 16, 16));
decimalNumber = decimalNumber / 16;
}
return hex;
}
}
public static int toDecimal(String hexNumber) {
//напишіть тут ваш код
int decimal = 0;
if ((hexNumber == null) || (hexNumber.equals(""))) {
return 0;
} else {
int countDown = 0;
for (int i = 0; i < hexNumber.length(); i++) {
decimal = 16 * decimal + Character.digit(hexNumber.charAt(countDown), 10);
countDown++;
}
return decimal;
}
}
}
православнойдесятичной. А у тебя пока выдаёт вот так: Десяткове число 1256 дорівнює шістнадцятковому числу -1 Шістнадцяткове число 4e8 дорівнює десятковому числу 1016 Дело осталось за малым - решить задачу :) в плане правильно написать алгоритм перевода из одной в другую. В этот раз тебе Character.digit не нужен, потому что у тебя есть удобная замена - константа HEX, хранящая в себе все цифры из 16ссч от 0 до f. Индекс символа - это значение в десятичной системе счисление, а сам символ - это цифра из 16ссч. Чтобы перевести из 16 в 10, надо по символу найти его индекс в строке hex, чтобы перевести из 10 в 16 - наоборот, найти символ по индексу. переводишь символ за символом, умножаешь и скалдываешь - и готово. А сейчас у тебя вообще строка hex не апдейтится, а заменяется на каждой итерации цикла. И куча артефактов от прошлого решения, которые здесь не нужны. Помимо самого метода digit, у тебя ненужная переменная countDown, потому что есть i, ненужная strDecimalNumber, которая обявлена, но ни разу не используется.