#java #recursion #hex
#java #рекурсия #шестнадцатеричный
Вопрос:
Я пытался проверить другие вопросы, близкие к этому, но не смог найти ни одного ответа на свой, поэтому отправил его как новое сообщение. Надеюсь, это не вызовет никаких проблем.
Я пытаюсь написать простой JAVA-код для преобразования чисел — из десятичной в восьмеричную или шестнадцатеричную. С восьмеричным все в порядке, но с шестнадцатеричным вывод находится в неправильном порядке. например, если ответ равен 613 — программа выдает 316.
Вот мой полный код:
import java.util.Scanner;
public class Cem {
public static void octalconverter(int a) {
if (a == 0) { //our base
System.out.println(); //I first put here return a, but then it was adding zeros to the end
} else {
System.out.print(a % 8);// first remainder = last digit, and so on
octalconverter(a / 8); //recursively going till it is base
}
}
public static void hexconverter(int a) {
if (a == 0) {
System.out.println();
} else {
System.out.print(hexchart(a % 16));
hexconverter(a / 16);
}
}
public static String hexchart(int a) {
String result = "";
if (a <= 9) {
result = a resu<
} else {
if (a == 10)
result = result "A";
// System.out.print("A");
if (a == 11)
result = result "B";
// System.out.print("B");
if (a == 12)
result = result "C";
// System.out.print("C");
if (a == 13)
result = result "D";
//System.out.print("D");
if (a == 14)
result = result "E";
//System.out.print("E");
if (a == 15)
result = result "F";
// System.out.print("F");
}
return resu<
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner oScan = new Scanner(System.in);
System.out.println("Please enter your decimal number : "); //getting input
int num = oScan.nextInt(); //assigning
System.out.println("Enter 1 for Octal Base Conversion #### Enter 2 for Hex Conversion");
int num2 = oScan.nextInt();
if (num2 == 1) {
System.out.print(num " in Octal(base8) system is : ");
octalconverter(num); //conversion
} else if (num2 == 2) {
System.out.print(num " in Hexadecimal(base16) system is : ");
hexconverter(num);
} else {
System.out.println("You entered a wrong choice for conversion type, please restart the program");
}
}
}
Не могли бы вы сказать мне, где я ошибся. Я также должен сказать, что я ищу ошибку, которую я сделал здесь, а не другой способ написания этого кода. Спасибо тем, кто готов поделиться другим способом, но мне снова нужно усвоить свою ошибку здесь.
Спасибо за вашу помощь
Комментарии:
1. Оба восьмеричных и шестнадцатеричных преобразователя неверны, поскольку вы печатаете «последнюю» цифру перед рекурсивным вызовом для печати «более ранних» цифр. Перейдите
print()
к после рекурсивного вызова.2. Я запустил ваш код, и результат был:
613 in Hexadecimal(base16) system is : 562
.3. привет, Андреас, 🙂 еще раз спасибо за помощь. Но восьмеричный дает правильный вывод. также вы имеете в виду, чтобы hexconverter помещал print() после hexconverter(a / 16)??
4. точно, DimaSan, хотя ответ равен 265 для 613, он выводится в неправильном порядке.
Ответ №1:
Изменить
public static void hexconverter(int a) {
if (a == 0) {
System.out.println();
} else {
System.out.print(hexchart(a % 16));
hexconverter(a / 16);
}
}
Для
public static void hexconverter(int a) {
if (a == 0) {
System.out.println();
} else {
hexconverter(a / 16);
System.out.print(hexchart(a % 16));
}
}
Ваше восьмеричное преобразование также не работает должным образом. Он печатает в обратном порядке. Так что просто поменял местами и эти инструкции.
Комментарии:
1. Когда я попробовал это, он ничего не распечатывает. вы уверены?
2. О да, извините, пользователь2509521, это было в следующей строке, вот результат:
3. выполнить: Пожалуйста, введите свое десятичное число: 613 Введите 1 для преобразования в восьмеричное число #### Введите 2 для преобразования в шестнадцатеричное число 2 613 в шестнадцатеричной (base16) системе: 265BUILD УСПЕШНО (общее время: 7 секунд)
4. Да, я это сделал. Еще раз большое вам спасибо за вашу помощь
Ответ №2:
Билл Гейтс однажды сказал, что он всегда будет «нанимать ленивого человека для выполнения сложной работы» в Microsoft. … «Потому что ленивый человек найдет простой способ сделать это».
Я знаю, вы сказали, что не ищете другого способа написания этого кода, но это гораздо более простой способ выполнить работу.
public static String octalNumber = "";
public static void octalconverter(int a){
while(a!=0){
octalNumber = octalNumber String.valueOf(a%8);
a = a/8;
}
System.out.println(new StringBuilder(octalNumber).reverse().toString());
}
Окончательное число должно быть отменено.Это была ошибка.
Комментарии:
1. Почо, ты прав, но мне разрешено использовать только рекурсивные, а while — это итерация, которую я не могу использовать. 🙂 Но, да, если бы не было ленивых людей, мы все бы все еще ходили, кто-то в истории был слишком ленив, чтобы ходить, и именно поэтому он изобрел автомобиль, скорее всего, другой кто-то (или кто-то) был слишком ленив, чтобы использовать автомобиль, вот почему они изобрелиплоскость. Будем надеяться, что скоро придет другой ленивый человек, и мы получим телепортацию 🙂