使用递归Java方法将十进制转换为十六进制
我需要创建一个递归方法,将十进制转换为十六进制。使用递归Java方法将十进制转换为十六进制,java,recursion,hex,decimal,Java,Recursion,Hex,Decimal,我需要创建一个递归方法,将十进制转换为十六进制。 我不能使用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);
我不能使用
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
大小写和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;
}
}
问题出在您的默认子句中:
default: result = Integer.toString(n/16) + result; break;
应改为:
default: result = Integer.toString(remainder) + result; break;
这将使您的程序返回“04D2”
但是,您还可以做一些其他更正:
默认值:结果=余数+结果;中断代码>
另外,将参数time更改为int
。如果您确实需要接收字符串
,则将其作为辅助函数,并使主函数接收字符串
默认值的末尾使用中断
“0”
,而不是整数.toString(0)
。。。但这甚至不是必需的,您可以使用“
来避免输出中的前导0
。如果您担心处理整数为“0”的特殊情况,请添加特殊条款问题出在您的默认子句中:
default: result = Integer.toString(n/16) + result; break;
应改为:
default: result = Integer.toString(remainder) + result; break;
这将使您的程序返回“04D2”
但是,您还可以做一些其他更正:
默认值:结果=余数+结果;中断代码>
另外,将参数time更改为int
。如果您确实需要接收字符串
,则将其作为辅助函数,并使主函数接收字符串
默认值的末尾使用中断
“0”
,而不是整数.toString(0)
。。。但这甚至不是必需的,您可以使用“
来避免输出中的前导0
。如果您担心处理整数为“0”的特殊情况,请添加特殊条款下面的代码可能会帮助您解决问题:
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;
}
公共静态字符串decimalToAnyBase(int-num,int-base){
如果(num=10)?(字符)(rem-10++'A')+“”:rem);
返回结果;
}
以下代码可能会帮助您解决问题:
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;
}
公共静态字符串decimalToAnyBase(int-num,int-base){
如果(num=10)?(字符)(rem-10++'A')+“”:rem);
返回结果;
}
好吧,关于你问题的第二部分,我相信你已经从蒙德金先生那里得到了答案
同时,对于问题的第一部分,这里是将十进制转换为十六进制的递归方法
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();
}
}
来源和参考-。好吧,关于你问题的第二部分,我相信你从蒙德金先生那里得到了答案 同时,对于问题的第一部分,这里是将十进制转换为十六进制的递归方法
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();
}
}
源代码和引用-。那么您尝试了什么?
Integer.toHexString
不会将十进制转换为十六进制:)您连接了两次,这就是它无法正常工作的原因。您将迭代与递归混合在一起。因此,请搜索:“+result”
替换为:
,并将其应用于除最后一个匹配之外的所有匹配。您是否注意到在递归调用中,您正在将整数转换为字符串,只是在函数开始时将其转换回?那么您尝试了什么?Integer.toHexString
不会将十进制转换为十六进制:)您连接了两次,这就是它无法正常工作的原因。您将迭代与递归混合在一起。因此,请搜索:“+result”
替换为:
,并将其应用于除最后一个匹配之外的所有匹配。您是否注意到,在递归调用中,您正在将整数转换为字符串,只是为了在函数开始时将其转换回?我在定位它之前按照您所说的做了,请参阅我的编辑。谢谢您没有在默认子句中,您正在执行:result=rements+result
。这只是为了将int改为String吗?您可以更清楚地执行此操作:result=“+余数”
。或者在本例中,对于您的Integer.toString
版本,如果它返回字符串且参数为int,我如何使其递归?仔细看看您的函数,返回值的类型与输入参数的类型无关。我不明白。我需要返回类型为string,否则a无法打印十六进制值an,为了使函数递归,我需要让函数调用自身。它返回一个字符串,那么输入参数类型与返回类型有何不同呢?我按照你刚才说的做了,请参见我的编辑。谢谢您没有在默认子句中,您正在执行:result=rements+result
。这只是为了将int改为String吗?您可以更清楚地执行此操作:result=“+余数”
。或者在本例中,对于您的Integer.toString
版本,如果它返回字符串且参数为int,我如何使其递归?仔细看看您的函数,返回值的类型与输入参数的类型无关。我不明白。我需要返回类型为string,否则a无法打印十六进制值an以使函数递归i