我需要创建一个将十进制转换为十六进制的递归方法。
我无法使用Integer.toHexString
。
编辑:我尝试了这段代码,但它无法正常工作
public static String Hexa(String s) {
String result = "";
int n = Integer.parseInt(s);
int remainder = n % 16;
if (n == 0) {
return Integer.toString(0);
} else {
switch (remainder) {
case 10:
result = "A" + result;
break;
case 11:
result = "B" + result;
break;
case 12:
result = "C" + result;
break;
case 13:
result = "D" + result;
break;
case 14:
result = "E" + result;
break;
case 15:
result = "F" + result;
break;
default: result = Integer.toString(n/16) + result; break;
}
System.out.println(result);
return Hexa(Integer.toString(n/16)) + result;
}
}
编辑:
更改了default
case和if (n == 0)
循环返回语句,它现在运行得非常好。
新代码:
public static String Hexa(String s) {
String result = "";
int n = Integer.parseInt(s);
int remainder = n % 16;
if (n == 0) {
return "";
} else {
switch (remainder) {
case 10:
result = "A";
break;
case 11:
result = "B";
break;
case 12:
result = "C";
break;
case 13:
result = "D";
break;
case 14:
result = "E";
break;
case 15:
result = "F";
break;
default:
result = remainder + result;
break;
}
return Hexa(Integer.toString(n / 16)) + result;
}
}
答案 0 :(得分:3)
问题出在你的默认条款中:
default: result = Integer.toString(n/16) + result; break;
应该是:
default: result = Integer.toString(remainder) + result; break;
这将使您的程序返回“04D2”。
但是你可以做出其他一些修正:
停止来回转换为String。例如,同一行可以只是:
default: result = remainder + result; break;
另外,将参数时间更改为int
。如果您确实需要收到String
,请将其设为辅助功能,并使主要功能获得String
。
break
default
不需要'F' = 'A' + (15 - 10)
您不需要开关。不是Integer.toString(0)
?您可以弄清楚如何制作一个公式,将[10,15]范围内的任何数字转换为相应的字母。
您可以使用"0"
代替""
,但这甚至不是必需的,您可以使用0
来避免引导"0"
你的输出。如果您担心处理整数为{{1}}的特殊情况,请添加特殊条款。
答案 1 :(得分:1)
以下代码可以帮助您解决问题:
public static String decimalToAnyBase(int num,int base) {
if(num<base) {
return num+"";
}
String result=null;
int rem=num%base;
String str=decimalToAnyBase(num/base, base);
result=str+((rem>=10)? (char)(rem-10+'A')+"":rem);
return result;
}
答案 2 :(得分:0)
嗯,对于你问题的第二部分,我相信你得到了Mr.MondKin的答案。
同时对于问题的第一部分,这里是将十进制转换为十六进制的递归方法。
import java.util.Scanner;
public class DecimalToHexaDemo
{
char hexa[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int temp;
String hexaDecimal = "";
String hexadecimal(int num)
{
if(num != 0)
{
temp = num % 16;
hexaDecimal = hexa[temp] + hexaDecimal;
num = num / 16;
hexadecimal(num);
}
return hexaDecimal;
}
public static void main(String[] args)
{
DecimalToHexaDemo dth = new DecimalToHexaDemo();
int decimalNumber;
Scanner sc = new Scanner(System.in);
System.out.println("Please enter decimal number: ");
decimalNumber = sc.nextInt();
System.out.println("The hexadecimal value is : ");
String str = dth.hexadecimal(decimalNumber);
System.out.print(str);
sc.close();
}
}
来源和参考 - decimal to hexadecimal java program。